Swift 25

[기초] guard let

guard let 구문은 옵셔널 값의 바인딩을 확인하고, 조건이 만족되지 않으면 조기에 코드 블록을 종료하는 데 사용된다. 주로 옵셔널 값이 nil 인지 아닌지를 검사하고, 옵셔널 값을 안전하게 추출하여 사용하는 데에 유용하다. guard let 바인딩된상수 = 옵셔널값 else { // 옵셔널값이 nil인 경우 실행되는 코드 // 종료 또는 오류 처리 등을 수행 } 옵셔널값 이 nil인 경우 else 블록 내부의 코드가 실행된다. else 블록은 guard let 구문에서 옵셔널값이 nil인 경우 실행되는 부분입니다. 일반적으로 코드를 조기 종료하거나 오류 처리를 수행하는 데 사용된다. 예시 greetUser(name: String?) 함수는 전달된 name을 검사하여 옵셔널 값을 바인딩한다. 만약 n..

[Swift] 함수 (Functions)

코딩의 꽃이라고 (개인적으로 생각하는) 함수! 함수란 무엇일까? 간단하게 이야기하면 x 가 들어가면 y 가 나오는 것이다. 결국 함수의 목적은 반환값에 있다고 생각한다. 어떠한 논리를 통해 x 를 y 로 바꿔주는 것이 함수이고, Swift 에서는 이를 정의하고, 호출하고 반환값을 사용하게 된다. Swift 에서는 x 를 파라미터라고 부르고 설명한다. Define and call functions, label their arguments, and use their return values 함수의 정의와 호출 (Defining and Calling Functions) 함수를 정의할 때 들어가는 x 의 타입과 반환되는 y 의 타입을 정의할 수 있다. 또한 그 함수를 사용하려면 함수를 구별할 수 있는 이름을 정..

[Swift] 제어 흐름 (Control Flow)

Swift 에서는 다양한 제어 흐름이 있다. 여러번 작업을 수행하는 while, 조건에 따라 다르게 실행되는 if, guard, switch 구문과 코드에서 실행 플로우를 전달하는 break, continue 가 있다. 또한 반복을 쉽게 만들어주는 for-in, 현재 범위를 벗어날 때 수행되는 코드인 defer 가 있다. For-In 루프 (For-In Loops) 연속된 것에 대해 for-in 루프를 사용하여 반복할 수 있다. let names = ["Anna", "Alex", "Brian", "Jack"] for name in names { print("Hello, \(name)!") } // Hello, Anna! // Hello, Alex! // Hello, Brian! // Hello, Jack..

[Swift] 콜렉션 타입 (Collection Types)

Swift 에서 배열(array), 집합(set), 딕셔너리(dictionary)를 사용하여 데이터를 어떻게 구성하는지 알아보자. 이를 콜렉션 타입이라 부른다. 배열은 순서를 가지고 있고, 집합은 반복되지 않은 값에 순서가 없다. 딕셔너리는 키-값 쌍의 순서가 없는 콜렉션 타입이다. 배열만 순서를 가지고 있다! 배열을 지정해줄때 타입을 명확하게 지정해줘야 한다. 콜렉션의 가변성 (Mutablility of Collections) 배열, 집합, 딕셔너리는 변경이 가능하다. 변수로 생성된 후에 추가하거나 삭제, 수정이 가능하다. 물론 상수로 선언해 주면 변경이 불가능하다. Note: 콜렉션을 변경할 필요가 없다면 상수로 선언해 주는 것이 좋다. Swift 컴파일러가 생성한 콜렉션의 성능을 최적화할 수 있다...

[Swift] 문자열과 문자 (Strings and Characters)

Swift 에서는 텍스트를 어떻게 저장하고 다루는지 알아보자. String 은 "hello, world" 나 "albatross" 같은 문자의 연속이다. Note : Swift의 String 타입은 Foundation 의 NSString 클래스와 연결되어 있다. 문자열 (String Literals) 상수 또는 변수의 초기값으로 문자열을 사용할 수 있다. 문자열은 쌍따옴표 ( " ) 로 둘러싸인 문자의 연속이다. let someString = "Some string literal value" Swift 에서는 자동으로 someString 상수를 String 타입으로 추론한다. 여러 줄 문자열 리터럴 (Multiline String Literals) 여러 줄의 문자열이 필요하면 3개의 큰따옴표를 사용해 주..

[Swift] 기본연산자 (Basic Operators)

기본 연산자는 코딩을 하면서 거의 기본 중에 기본이라고 볼 수 있다. 과연 Swift는 다른 언어와 어떠한 점이 같고, 어떠한 점이 다를까? Swift에서 기본 연산자란 대입, 연산, 비교를 수행한다. 값을 변경, 확인, 결합하기 위해서 사용한다. 예를 들면 + 는 두 숫자를 더하게 되고 AND 연산자 (&&)는 두 Boolean값을 결합하게 된다. 용어 (Terminology) 연산자는 단항, 이항, 삼항으로 나눌 수 있다. 단항의 경우 -a 처럼 단일 항목에 적용된다. !b, c! 처럼 말이다. 이항의 경우 2 + 3 처럼 2개의 항목에 동작하고 2개의 항목 사이에 위치한다. 삼항의 경우 Swift는 하나의 삼항 연산자인 조건 연산자만 있고 a ? b : c 형태로 이루어진다. 연산자 (operato..

[Swift] 구조체와 클래스 (Structures and Classes)

프로그램을 구성하는 데 있어서 구조체와 클래스 (Structures and Classes) 는 필수 요소이다. 속성과 방법을 정의하게 된다. 스위프트에서는 구조체와 클래스를 정의하기만 하면 자동으로 사용할 수 있게 된다고 한다. Note : 인스턴스 (instance) 라는 단어가 자주 등장하는데 인스턴스가 도대체 뭘까? 클래스나 구조체, 열거형에서 생성된 것 (Object) 를 이야기한다. 하지만 Swift에서는 구조체 또는 클래스가 기능에 가깝기 때문에 인스턴스 (instance) 라는 용어를 사용한다고 한다. 아래 처럼 상수 human1 을 인스턴스라고 부른다. let human1 = Human(name: "Tyler", age: 30) 구조체와 클래스의 비교 (Comparing Structures..

[Swift] 백준 5618 공약수

문제 링크 5618번: 공약수 첫째 줄에 n이 주어진다. n은 2 또는 3이다. 둘째 줄에는 공약수를 구해야 하는 자연수 n개가 주어진다. 모든 자연수는 108 이하이다. www.acmicpc.net 나의 풀이 import Foundation let n = Int(readLine()!)! let number = readLine()!.split(separator: " ").map{Int($0)!} for i in 1...number.min()! { if n == 2 { if (number[0] % i == 0) && (number[1] % i == 0) { print(i) } } else { if (number[0] % i == 0) && (number[1] % i == 0) && (number[2] % ..

[Swift] 백준 14425번 문자열 집합

문제 링크 14425번: 문자열 집합 첫째 줄에 문자열의 개수 N과 M (1 ≤ N ≤ 10,000, 1 ≤ M ≤ 10,000)이 주어진다. 다음 N개의 줄에는 집합 S에 포함되어 있는 문자열들이 주어진다. 다음 M개의 줄에는 검사해야 하는 문자열들이 주어 www.acmicpc.net 문제 풀이 import Foundation let NM = readLine()!.components(separatedBy: " ").map{Int($0)!} var set : Set = [] var n = 0 for _ in 1...NM[0] { set.insert(readLine()!) } for _ in 1...NM[1] { if set.contains(readLine()!) { n += 1 } } print(n) A..