Implicitly Unwrapped Optional(암시적 추출 옵셔널)
var optionalValue: Int! = 100 switch optionalValue { case .none: print("var is nil") case .some(let value): print("var is \(value)") }
기존 변수처럼 활용이 가능하고 nil 할당이 가능하지만 잘못된 접근으로 런타임 오류가 발생할 여지가 있다.
Optional
var optionalValue: Int? = 100 switch optionalValue { case .none: print("var is nil") case .some(let value): print("var is \(value)") } nil 할당이 가능하지만 기존 변수처럼은 활용할 수 없다. 옵셔널과 일반타입과는 다른타입으로 취급한다.
Optional 값 추출방법
Optional Binding(옵셔널 바인딩)
func printName(_ name: String) { print(name) } var myName: String? = nil var yourName: String? = jahlee printName(myName)// 타입이 달라서 컴파일 오류 // if let 방식으로 존재하면 사용할 수 있다. if let name: String = myName{ print("my name is \(name)) } else { print("name == nil") } // 여러 옵셔널 변수들을 한꺼번에 바인딩 할 수있다. 대신 모든 옵셔널 변수들이 다 존재해야 들어가진다. if let name: String = myName, let friend: String = yourName{ print("my name is \(name)) } else { print("name == nil") }
Force Unwrapping(강제 추출)
var myName: String? = nil var yourName: String! = jahlee print(myName!)// 이와같이 강제로 추출할 수 있다. // 암시적 추출의 경우 이미 강제추출을 가정하고 선언을 하였기 때문에 // !를 빼도 된다. print(yourName)