흔히
nil값은 값이 없는 걸 의미하는 데, 정확히는 값이 없다는 걸 의미하는 값이 들어있는 형태입니다.
enum Optional<Wrapped>{
case some(Any)
case none
}
옵셔널은 Enum 타입으로 이루어져 있고, 값이 존재하는 경우인 some과 존재하지 않는 경우인 none 케이스로 이루어져 있습니다.
저희는 이 Optional.none 값을 nil 이라고 부릅니다.
옵셔널 타입에
.접근 연산자를 사용할 때, nil일수도 있음을 알리기 위해서 반드시 앞에?를 붙여야합니다.
class Dog {
var name: String?
var weight: Int
init(name: String, weight: Int) {
self.name = name
self.weight = weight
}
}
class Human {
var dog: Dog?
}
var human = Human()
human.dog = "choco"
human.dog?.name
print(human.dog?.name) // Optional("choco")
// 1. !로 강제로 벗기기
print(human2!.dog!.name)
// 2) if let 바인딩
if let name = human2?.dog?.name
print(name)
}
// 3) Nil-Coalescing 연산자
var defaultName = human2?.dog?.name ?? "까망이"
print(defaultName)
! 를 사용해서 강제로 해제시키는건 런타임 에러로 앱이 강제 종료될 수 있으니 사용하지 않는 걸 추천드립니다.