Contents
[ 옵셔널 값 추출 방법 ]있을수도 없을수도 있는 값을 말하며
?(옵셔널 타입)와 !(암시적 옵셔널 타입)을 사용하여 나타낼 수 있고, 주석등을 달아 설명하지 않아도 코드만으로 nil의 허용을 알 수 있어 효율적이다.
선언 방법
let optionalValue : Optional<Int> = nil
let optionalValue2 : Int? = nil
?와 !의 차이점
?의 경우 없을 수 있다를 전제하여 사용하기 때문에 사용하거나 추출시 없을 수 있음에 대비하여 코드를 작성해야하나 !의 경우 값이 있음을 전제하기에 없을 수 있음에 대비하여 코드를 구성하지 않아도 에러가 발생하지 않는다.
하지만 런타임시 값이 없을경우 런타임에러를 반환할 수 있으므로 되도록 ?를 이용하자
[ 옵셔널 값 추출 방법 ]
Optional Binding
nil을 체크한 후 안전한 값을 추출함
if - let
var num:Int? = nil if let n = num { //num에 값이 있으면 n에 값이 할당되고 값이 할당되어야만 {}구문이 실행된다. //할당되어있지 않으므로 print("num은 비어있지 않음") //이 구문은 실행되지 않는다 }
var num:Int? = nil num = 6 if let n = num { //num에 6이 할당되었기에 아래 구문이 실행된다. print("num은 비어있지 않음") }
체크해야할 값이 둘이상일 경우 아래와 같이 나열에서 작성해주어야하고 나열한 값들 모두 nil이 아닐경우에만 실행구문을 실행한다
if let n = num, let n2 = num2 {}
var num:Int? = nil var num2:Int? = nil num = 6 func test () -> Void { if let n = num, let n2 = num2 { print(n + n2) }else{ print("값의 확인이 필요함") } } test() //출력 "값의 확인이 필요함" num2 = 10 test() // 출력 16
Force Unwrapping
값을 강제로 추출하는 방법으로 변수뒤에 !를 붙여주면서 이 변수엔 값이 존재하니 체크하지 않아도돼 하고 알려주는 것이다. 런타임까지 가야 값이 없을때 에러를 반환하므로 위험하다.
func printName(name:String) -> Void{ print(name) } var myName:String? = "영희" printName(name: myName!) //영희를 출력 myName = nil printName(name: myName!)//값없음 에러 출력
Share article