//: Playground - noun: a place where people can play


import Swift


// 옵셔널 추출 방법에는 optional binding 과 force unwrapping 이 있다.

// optional binding : nil 체크 + 안전한 값 추출


func printName(_ name: String) {

    print(name)

}


//var myName: String? = nil


// printName(myName)

// 전달되는 값의 타입이 다르기 때문에 컴파일 오류발생


var myName: String! = nil


if let name: String = myName {

    printName(name)

} else {

    print("myName == nil")

}


// name 상수는 if-let 구문 내에서만 사용가능합니다.

// 상수 사용범위를 벗어났기 때문에 컴파일 오류 발생

// printName(name)


var myName2: String? = "realName2"

var yourName: String? = nil

if let name = myName2, let friend = yourName {

    print("\(name) and \(friend)")

}// yourName 이 nil이기 때문에 실행되지 않는다.


yourName = "realYourName"


if let name = myName2, let friend = yourName {

    print("\(name) and \(friend)")

} // realName2 and realYourName



// Force Unwrapping 옵셔널의 값을 강제로 추출


func printName2(_ name: String){

    print(name)

}


var myName3: String? = "realName"


printName2(myName3!) // realName


myName3 = nil


// print(myName3!)

// 강제 추출시 값이 없으므로 런타임 오류 발생


var yourName3: String! = nil


// printName2(yourName3) //nil 값이 전달되기 때문에 런타임 오류 발생


// optional binding 방식을 추천한다.




'Swift > 기초&문법' 카테고리의 다른 글

스위프트 swift 클래스 class  (0) 2018.08.21
스위프트 swift 구조체  (0) 2018.08.20
스위프트 swift 옵셔널  (0) 2018.08.14
스위프트 swift 반복문  (0) 2018.08.14
스위프트 swift 조건문  (0) 2018.08.14

+ Recent posts