옵셔널 바인딩은 옵셔널에 값이 있는지 확인할 때 사용
if
, while
등과 결합하여 사용if let constantName = someOptional {
statements
}
옵셔널 바인딩 예제
if let actualNumber = Int(possibleNumber) {
print("The string \"\(possibleNumber)\" has an integer value of \(actualNumber)")
} else {
print("The string \"\(possibleNumber)\" couldn't be converted to an integer")
}
// Prints "The string "123" has an integer value of 123"
if let firstNumber = Int("4"), let secondNumber = Int("42"), firstNumber < secondNumber && secondNumber < 100 {
print("\(firstNumber) < \(secondNumber) < 100")
}
// Prints "4 < 42 < 100"
if let firstNumber = Int("4") {
if let secondNumber = Int("42") {
if firstNumber < secondNumber && secondNumber < 100 {
print("\(firstNumber) < \(secondNumber) < 100")
}
}
}
// Prints "4 < 42 < 100"
// guard 사용 옵셔널 바인딩
func printParsedInt(from: String) {
guard let parsedInt = Int(from) else {
print("Int로 컨버팅 안된다~")
return
}
print(parsedInt)
}
💡옵셔널 바인딩을 통해 한 번에 여러 옵셔넣의 값을 추출할 수 있는데 쉼표(,
)를 사용하여 바인딩 할 옵셔널을 나열하면 된다. (옵셔널 중 값이 하나라도 없다면 해당 블록 내부의 명령어 실행❌)
0
, Boolean
조건이 false
일때 전체 if
문의 조건은 false
로 간주된다.nil
을 할당하고 싶거나 옵셔널 바인딩으로 매번 값 추출이 번거로울 경우, nil
로 인해 런타임 오류가 발생하지 않을것 같다는 확신이 들 때 nil
을 할당해줄 수 있는 변수, 상수를 사용하기 위해 사용
let possibleString: String? = "An optional string."
let forcedString: String = possibleString! // requires an exclamation point
let assumedString: String! = "An implicitly unwrapped optional string."
let implicitString: String = assumedString // no need for an exclamation point
nil
할당⭕💡옵셔널을 사용할 때는 강제 추출, 암시적 추출 옵셔널 보다 옵셔널 바인딩, nil 병합 연산자, 옵셔널 체이닝 등을 사용하는 것이 안전함
참고: https://docs.swift.org/swift-book/LanguageGuide/TheBasics.html