π μ΅μ λ 체μ΄λ
μ΅μ λ 체μ΄λμ ꡬ쑰체λ, ν΄λμ€ μ΅μ λμ μ¬μ©νλλ° κ·Έ μ΅μ λμ΄ λ μ΅μ λμ κ°μ§ λ
μ¦, μ°μμ μΌλ‘ μ΅μ λμ κ°μ§λ κ²½μ°μ μ¬μ©ν μ μλ€.
μλ₯Όλ€μ΄ μλμ κ°μ ν΄λμ€κ° μλ€κ³ νμ.
// κ°μΈμ 보
class Person {
var name : String
var age : Int
var phone : Phone?
init(name : String, age : Int){
self.name = name
self.age = age
}
}
// ν°μ 보
class Phone {
var number : String
var type : Kind?
init(number : String){
self.number = number
}
}
// ν°μ’
λ₯
class Kind {
var brand : String
var color : String
init(brand : String, color : String){
self.brand = brand
self.color = color
}
}
λ€μκ³Ό κ°μ΄ μΈμ€ν΄μ€λ₯Ό μμ±νλ©΄, Phoneμ type μΈμ€ν΄μ€κ° infoμ΄μ§λ§, infoκ° λΉμ΄μμΌλ―λ‘ ν° μ’ λ₯λ₯Ό μ μ μλ€.
var sladuf = Person(name: "sladuf", age: 24)
var phone = Phone(number: "01011112222")
var info = Kind()
phone.info = info
sladuf.phone = phone
λ§μ½ μ΄λ€ μ¬λμ ν° λΈλλκ° κΆκΈνλ€λ©΄, ν°μ μ 보λ₯Ό μ λ ₯ νλμ§λΆν° νμΈν΄μΌ νλ€.
μ΅μ λ 체μ΄λ μμ΄ ν΄λΉ μ 보λ₯Ό νμΈνλ κ³Όμ μ,
if let phone = sladuf.phone {
if let info = phone.info {
if let brand = info.brand {
print("\(sladuf.name)μ ν° λΈλλλ \(brand) μ
λλ€.")
} else {
print("ν° λΈλλλ₯Ό μ μ μμ΅λλ€.")
}
}
}
λ§μ½, phone.info λΆν° μ λ³΄κ° μλ€λ©΄ μ무κ²λ μΆλ ₯μ΄ λμ§ μκΈ° λλ¬Έμ, λΆνΈνκ³ λ³΅μ‘νλ€.
π‘ μ΅μ λ 체μ΄λμ μ΅μ λμ λνλ΄λ ?(λ¬Όμν)λ₯Ό ν΅ν΄ κ°μ μ 보λ₯Ό λ€μκ³Ό κ°μ΄ κ°λ¨νκ² νμΈν μ μλ€.
if let brand = sladuf.phone?.info?.brand{
print("\(sladuf.name)μ ν° λΈλλλ \(brand) μ
λλ€.")
} else {
print("ν° λΈλλλ₯Ό μ μ μμ΅λλ€.")
}
π nil λ³ν© μ°μ°μ
?? λΌκ³ νλ μ€μμ°μ°μλ₯Ό μ¬μ©νμ¬ κ°μ λ°νν μ μλ€.
Optional ?? return_value
μμμ μΈκΈν brandλ₯Ό μλ‘λ€μ΄ μ½λλ₯Ό μμ±νλ©΄,
var sladuf_phone_brand = sladuf.phone?.info?.brand ?? "μμ΄μ"
print(sladuf_phone_brand) // "μμ΄μ"
sladuf.phone?.info?.brand = "apple"
var sladuf_phone_brand2 = sladuf.phone?.info?.brand ?? "μμ΄μ"
print(sladuf_phone_brand2) // "apple"
'π Programming > Swift' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Swift] .\self ? ν€κ²½λ‘ νΊμ보기 (KeyPath) (1) | 2022.09.18 |
---|---|
[Swfit] νλ‘νΌν° κ°μμ / property observer (willSet & didSet) (0) | 2022.05.26 |
[Swift] class μμ(Inheritance) (0) | 2022.02.03 |
[Swift] property(νλ‘νΌν°) (0) | 2022.01.24 |
[Swift] ν΄λ‘μ (Closure)μ λͺ¨λ κ² (0) | 2022.01.21 |