주어진 조건에 따라서 어플리케이션이 다르게 동작하는 것
if 문은 조건식이 참이 되는 경우에 그에 일치하는 결과가 실행되도록 하는 조건 구문이다.
if 조건식1 {
조건1을 만족할 경우 실행할 구문
} else if 조건식2 {
조건2를 만족할 경우 실행할 구문
} else {
만족하지 않으면 실행할 구문
}
switch 문은 먼저 변수 또는 상수에 어떤 기준이 되는 데이터를 선언하고, 해당 데이터를 여러 패턴들과 비교하도록 함으로써, 그에 일치하는 결과가 실행되도록 하는 조건 구문이다.
switch 비교대상 {
case 패턴1:
비교대상이 패턴1일 경우 실행할 구문
case 패턴2, 패턴3:
비교대상이 패턴2, 3일 경우 실행할 구문
default:
비교대상이 위의 1,2,3 어느 패턴과도 일치하지 않을 때 실행할 구문
}
let temperature = 30
switch temperature {
case -20...9:
print("겨울입니다")
case 10...14:
print("가을입니다")
case 15...25:
print("봄입니다")
case 26...35:
print("여름입니다")
default:
print("이상기후입니다")
}
// "여름입니다"
함수 안에서 활용되며, guard 문 안의 조건을 만족하는 경우 그에 맞는 결과를 실행
반복적으로 코드가 실행되게 만드는 구문
for 루프상수(= 보통 i) in 순회대상(= '...'으로 정의하는 범위) {
실행할 구문
}
while 조건식 {
실행할 구문
}
var number = 5
while number < 10 {
number += 1
}
number
// 10
repeat {
실행할 구문
} while 조건식
var x = 6
repeat {
x += 2
} while x < 5
x
// 8
값이 있을 수도 있고 없을 수도 있는 것을 나타내는 것
var name: String = ""
// 값이 빈 문자열 ""인 것을 의미
var number: Int = 0
// 값이 정수 0인 것을 의미
var name: String?
var name: String? = nil
var name: String? = "Gunter"
// 모두 옵셔널한 상황을 전제하며, 값이 없을 수도(nil) 있음을 의미
var number: Int?
var number: Int? = nil
var number: Int? = 10
// 모두 옵셔널한 상황을 전제하며, 값이 없을 수도(nil) 있음을 의미
옵셔널하지 않은 변수에 옵셔널한 값을 대입할 수는 없다. 왜냐하면 옵셔널한 값은 Optional()
의 형태로 포장(wrapped) 되기 때문이다.
var optionalName: String? = "Gunter"
print(optionalName)
// Optional("Gunter")
var requiredName: String = optionalName
// Value of optional type 'String?' must be unwrapped to a value of type 'String'...
이러한 포장을 벗겨내어, 옵셔널한 값을 자유롭게 여기저기에 쓸 수 있게 하는 것을 바로 '옵셔널 바인딩'이라고 한다.
옵셔널을 해제하는 방법에는 크게 두가지가 있다.
강제해제: 옵셔널로 선언된 변수 뒤에 !
를 붙이는 것.. 만약 변수가 nil
이라면 위험!
var number: Int? = 3
print(number)
// Optional(3)
print(number!)
// 3
비강제해제(=옵셔널 바인딩) : 조건문으 활용하여 안전하게 옵셔널을 탈출 가능하게 함!
// if문을 활용한 옵셔널 바인딩
if let result = number {
print(result)
}
// 3
// guard문을 활용한 옵셔널 바인딩
func test() {
let number: Int? = 3
guard let result = number else {
return
}
print(result)
}
test()
// 3
컴파일러에 의한 자동해제
let value: Int? = 3
if value == 3 {
print("value가 3입니다")
} else {
print("value가 3이 아닙니다")
}
// "value가 3입니다"
타입 변경을 통한 묵시적 해제
let string = "3"
var stringToInt: Int! = Int(string)
print(stringToInt + 1)
// 4