OptionalExpression에 nil값이 아니라면 상수에 추출된 값이 저장되게 된다. 만약 nil이라면 바인딩이 실패하면서 다음 문장을 실행하게 된다. 강제 추출과 다르게 nil값이 있더라도 크레쉬가 일어나지 않는다.
var num : Int? // optional에는 값을 저장해도 되고 안해도 된다.
이 옵셔널에서 값을 꺼내오는것을 언랩핑이라 하며 추출이라고도 한다.
//print(num!) // 강제 추출을 할때 nil값이면 에러가 생긴다.
if num != nil { // 이런식으로 코드를 작성하지는 않으며 보통 Optional Binding을 통해 안전하게 값을 추출한다.
print(num!)
} else {
print("empty")
}
if let num = num { // 같은 이름으로 상수를 선언해도 상관없으나 scope에 대한 이해가 필요하다.
print(num) // optional이 아닌 non-optional 값으로 추출된다.
이미 추출된 값을 강제로 언랩핑 할시 에러가 생긴다.
} else {
print("empty")
}
var str : String? = "str"
guard let str = str else { // else블록 안에서는 바인딩한 상수를 인식할수 없으므로 else 블록 다음에 인식된다.
fatalError()
}
str // 언랩핑 된 값
num = 123
if var num = num { // 상수로 선언시 추출한 값을 변경할수 없지만
변수로 선언시 내부에서 추출한 값을 변경할수 있게 된다.
num = 456
}
let a : Int? = 12
let b : String? = "str"
if let num = a, let str = b, str.count > 5 { // ,로 여러개의 값을 추출허거나 조건을 추가 가능
하나라도 nil값이거나 false라면 추출되지 않는다.
}