class Dog {
var name: String?
var weight: Int
init(name: String, weight: Int) {
self.name = name
self.weight = weight
}
func sit() {
print("\(self.name)가 앉았습니다.")
}
func layDown() {
print("누웠습니다.")
}
}
class Human {
var dog: Dog?
}
// 옵셔널타입에 대해, "접근연산자"를 사용할때, ?(물음표)를 붙여서, 앞의 타입이 값이 nil을 가질 수도 있음을 표시
var choco = Dog(name: "초코", weight: 15)
choco.name
choco.sit()
//choco?.name = "초코얌"
//choco?.sit() // Optional("초코얌")가 앉았습니다.
//var human = Human()
//human.dog = choco
//human.dog?.name
//print(human.dog?.name) // Optional("초코얌")
var human2: Human? = Human()
human2?.dog = choco
human2?.dog?.name
print(human2?.dog?.name) // Optional("초코얌")
타입에 값이 있으면 옵셔널 리턴 타입으로 반환 (원래 리턴형이 옵셔널이 아니더라도)
타입에 값이 없으면 nil로 반환
var bori: Dog? = Dog(name: "보리", weight: 20)
bori?.layDown() // ⭐️ 앞의 타입이 옵셔널이라고 해서 메서드가 실행이 안되는 것은 아님
bori?.sit() // Optional("보리")가 앉았습니다.
bori = nil
bori?.layDown() // 타입의 값이 nil이면, 함수가 실행이 되지 않고 nil을 반환