1. 옵셔널 추출(Optional Unwrapping)이란
- 옵셔널에 들어있는 값을 사용하기 위해 꺼내오는 것
Int? 에 값이 있는지 없는지 물어보고 있으면 값을 꺼내오는거라고 생각하자
2. 옵셔널 방식
1. Optional Binding
- nil 체크 + 안전한 추출
- 옵셔널의 값을 꺼내오는 방법 중 하나
2. 옵셔널 안에 값이 들어있는지 확인하고 값이 있으면 값을 꺼내옴
3. if - let 방식 사용
코드로 보기
func printName(_name: String){
print(name)
}
var myName: String? = nil
//printName(myName)
// 전달되는 값의 타입이 다르기 떄문에 컴파일 오류 발생
그래서 if-let 방식을 통해서 바인딩 가능
if let name: String = myName{
printName(name)
}else{
print("myName == nil")
}
var yourName: String! = nil --> 암시적 추출형식으로 값을 꺼내올 수 있음
if let name: String = yourName{
printName(name)
}else{
print("yourName == nil")
}
// name 상수는 if-let 구문 내에서만 사용가능합니다
// 상수 사용범위를 벗어났기 때문에 컴파일 오류 발생
// printName(name)
// ,를 사용해 한번에 여러 옵셔널을 바인딜 할 수 있습니다 .
// 모든 옵셔널에 값이 있을떄만 동작합니다.
myName = "GD"
yourName = nil
if let name = myName, let friend = yourName{
print("\(name) and \(friend)")
}
// yourName이 nil이기 떄문에 실행되지 않습니다.
yourName = "hana"
if let name = myName, let friend = yourName{
print("\(name) and \(friend)")
}
// GD and hana
4. Force Unwrapping
옵셔널의 값을 강제로 추출
*강제추출 : 옵셔널에 값이 들어있는지 아닌지 확인하지 않고 강제로 값을 꺼내는 방식,
만약 값이 없을 경우 (nil) 런타임 오류가 발생하기 때문에 추천되지 않습니다.
var myName: String? = GD
var youName: String! = nil
printName(myName!)// GD --------> !를 붙이게 되면 옵셔널타입 안에 값을 강제로 추출한다
myName = nil
//print(myName!)
//강제추출시 값이 없으므로 런타임 오류 발생
yourName = nil
//printName(yourName)
// nil 값이 전달되기 때문에 런타임 오류발생