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
반응형
'Language > Swift' 카테고리의 다른 글
[Optional] (0) | 2021.05.12 |
---|---|
[Optional] (0) | 2021.05.10 |
[2_객체지향 프로그래밍과 스위프트] Chapter10. property, method (0) | 2021.03.11 |
[2_객체지향 프로그래밍과 스위프트] Chapter9. struct/class (0) | 2021.03.11 |
[1_스위프트 기초] Chaptrer 1. Swift (0) | 2021.03.11 |