옵셔널
- 값이 없는 경우에 사용
- 자료형에 대응하는 옵셔널 타입
- 옵셔널 변수에 값이 할당 되었을 때: 그 값을 그대로 가짐
- 옵셔널 변수에 값이 할당되지 않았을 때: nil 값을 가짐
→ nil을 사용할 수 있는 Type을 Optional Type 이라고 부름 (? 사용)
- Optional Type 의 경우 Optional<자료형> Type 임
- Swift에서 Optional은 enum(열거형)으로 구현이 되어 있음
- 제네릭으로 선언되어 있어서, 어떤 타입이든 받을 수 있음
- 옵셔널 중에 타입 옆에
?
가 아니라 !
를 붙이는 옵셔널 묵시적 추출도 있습니다. 하지만 API에서 IUO를 return 한 경우를 제외하면 어쨌든 IUO도 강제 추출이기 때문에 사용하지 않는 것을 권장합니다.
var doughnut: String = "레몬필링도넛"
print(doughnut) // 레몬필링도넛
var doughnut: String?
print(doughnut) // nil
var doughnut: String? = "레몬필링도넛"
print(doughnut) // Optional("레몬필링도넛")
let age : Int? = 19
print("내 나이는 \\(age)살 입니다.") //내 나이는 Optional(19)살 입니다.
enum Optional<Wrapped> : ExpressibleByNilLiteral {
case none
case some(Wrapped)
}
var optionalValue: Optional<Int> = nil
// Optional<Int>를 ?로 축약 가능함
var optionalValue: Int? = 100
switch optionalValue{
case .none:
print("This is optional variable is nil")
case .some(let value):
print("Value is \\(value)")
nil
- 값이 없음을 뜻함
- Swift 언어의 안전성을 높이기 위해 오류를 발생시키기 보다는 오류 대신 nil 값을 반환함으로써 개발자에게 오류가 발생했다는 사실을 전달하는 역할
- nil을 저장할 수 있는 것은 오직 Optional로 선언된 자료형만 가능함
- nil은 말 그래도 값이 없기에 자료형을 유추할 수 없음
nil
을 할당하게 된다면 컴파일 오류가 발생 된다.