Language/Swift

[1_스위프트 기초] Chpater8. Optional

개랭갱깽스타 2021. 3. 11. 11:34

safe

 

enum School: String{
    case primary = "유치원"
    case elementary = "초등학교"
    case middle = "중학교"
    case high = "고등학교"
    case univ = "대학교"
}
let hightestEducationLevel: School = School.middle
print("저의 최종 학력은 \(hightestEducationLevel.rawValue) 입니다.")

let primary = School(rawValue:"유치원")    //primary
let gradute = School(rawValue:"석박사")    //nil

School? 으로 추론

 

옵셔널은 열거형으로 구현되어 있다!

 

옵셔널 추출(Optinal Unwrapping): 옵셔널의 값을 옵셔널이 아닌 값으로 추출

- 강제추출: 변수(!) /  가장 위험한 방법

- 옵셔널바인딩: if let ~

- 암시적 추출 옵셔널: 선언 시, !

-> 암시적 추출 옵셔널 보다는, 옵셔널 바인딩, nil 병합 연산자, 옵셔널 체이닝 등의 방법을 사용 해야한다.

 

Optional의 값을 Optional 이 아닌 값으로 추출 = Optional Unwrapping

1. 강제추출(Forced Unwrapping)

var myName: String? = "yagom"
var yagom: String = myName!

myName = nil
yagom = myName!

if myName != nil {
    print("My name is \(myName)")
} else {
    print("myName == nil")
}

 

2. OptionalBinding

var myName:String? = "gaeng"

if let name = myName {
    print("My name is \(name)")
} else {
    print("myName == nil")
}

//Optional Binding 을 통한 임시 변수 할당
if var name = myName {
    name = "wizplan"    //변수이므로 내부에서 변경 가능
    print("myName is \(name)")
} else {
    print("myName == nil")
}

//Optional Binidng 을 통한 여러 개의 옵셔널 값의 추출
var myName: String? = "gaeng"
var yourName: String? = nil

if let name = myName, let friend = yourName {
    print("We are friend!")
}
yourName = "eric"

if let name = myName, let friend = yourName {
    print("We are friend! \(name), & \(friend)")
}

 

3. 암시적 추출 옵셔널(Implictly Unwrapped Optionals)

var myName:String! = "yagom"
print(myName)
myName = nil

if var name = myName {
    print("My name is \(name)")
} else {
    print("myName == nil")
}

//myName.isEmpty //error - Unexpectedly found nil while implicitly unwrapping an Optional value

 

반응형