νλ‘νΌν° κ°μμ (Property Observers)
- νλ‘νΌν° κ°μ΄ λ³κ²½λ¨μ λ°λΌ μ μ ν μμ
μ μ·¨ν μ μλ€.
- λν, νλ‘νΌν° κ°μ΄ μλ‘ ν λΉλ λλ§λ€ νΈμΆλλ€.
- λ³κ²½λλ κ°μ΄ νμ¬μ κ°κ³Ό κ°λλΌλ νΈμΆλλ€.
- μ μ₯ νλ‘νΌν°λΏλ§ μλλΌ νλ‘νΌν°λ₯Ό μ¬μ μν΄ μμλ°μ μ μ₯ νλ‘νΌν° λλ μ°μ° νλ‘νΌν°μλ μ μ©ν μ μλ€.
- μμλ°μ§ μμ μ°μ° νλ‘νΌν°μλ νλ‘νΌν° κ°μμλ₯Ό μ¬μ©ν μ μλ€. (μ μ₯λμ΄μΌ ν κ°μ΄ μμ λλ§ μ€νλκΈ° λλ¬Έμ)
• willSet
νλ‘νΌν°μ κ°μ΄ λ³κ²½λκΈ° μ§μ μ νΈμΆνλ λ©μλ
• didSet
νλ‘νΌν° κ°μ΄ λ³κ²½λ μ§νμ νΈμΆνλ λ©μλ
• willSet & didSetμ 맀κ°λ³μ
willSet λ©μλμ μ λ¬λλ μ λ¬μΈμ → νλ‘νΌν°κ° λ³κ²½λ κ°
didSet λ©μλμ μ λ¬λλ μ λ¬μΈμ → νλ‘νΌν°κ° λ³κ²½λκΈ° μ μ κ°
λ λ€ λ§€κ°λ³μλ₯Ό μ§μ νμ§ μμΌλ©΄, μλμΌλ‘ μ§μ λ¨.
willSet → newValue
didSet → oldValue
<μ¬μ© λ°©μ>
willSet(newValue) & didSet(oldValue)
μ΄λ κ² λ€μμ μκ΄νΈλ‘ κ°μΌ μ΄λ¦μ μ μ΄μ£Όλ©΄ λ¨.
class Account {
var credit: Int = 0 { // μ μ₯ νλ‘νΌν°
willSet { // 1 //4
print("μμ‘μ΄ \(credit)μμμ \(newValue)μμΌλ‘ λ³κ²½λ μμ μ
λλ€.")
}
didSet { // 2 // 5
print("μμ‘μ΄ \(oldValue)μμμ \(credit)μμΌλ‘ λ³κ²½λμμ΅λλ€.")
}
}
var dollarValue: Double { // μ°μ° νλ‘νΌν°
get {
return Double(credit) / 1000.0
}
set { // 6
credit = Int(newValue * 1000)
print("μμ‘μ \(newValue)λ¬λ¬λ‘ λ³κ²½ μ€μ
λλ€.")
}
}
}
class ForeignAccount: Account {
override var dollarValue: Double {
willSet { // 3
print("μμ‘μ΄ \(dollarValue)λ¬λ¬μμ \(newValue)λ¬λ¬λ‘ λ³κ²½λ μμ μ
λλ€.")
}
didSet { // 7
print("μμ‘μ΄ \(oldValue)λ¬λ¬μμ \(dollarValue)λ¬λ¬λ‘ λ³κ²½λμμ΅λλ€.")
}
}
}
let myAccount: ForeignAccount = ForeignAccount() // μμ‘μ΄ 0μμμ 1000μμΌλ‘ λ³κ²½λ μμ μ
λλ€. (Account - willSet)
myAccount.credit = 1000 // μμ‘μ΄ 0μμμ 1000μμΌλ‘ λ³κ²½λμμ΅λλ€. (Account - didSet)
// μμ‘μ΄ 1.0λ¬λ¬μμ 2.0λ¬λ¬λ‘ λ³κ²½λ μμ μ
λλ€. (ForeignAccount - willSet)
// μμ‘μ΄ 1000μμμ 2000μμΌλ‘ λ³κ²½λ μμ μ
λλ€. (Account - willSet)
// μμ‘μ΄ 1000μμμ 2000μμΌλ‘ λ³κ²½λμμ΅λλ€. (Account - didSet)
myAccount.dollarValue = 2 // μμ‘μ 2.0λ¬λ¬λ‘ λ³κ²½ μ€μ
λλ€. (dollarValue - set)
// μμ‘μ΄ 1.0λ¬λ¬μμ 2.0λ¬λ¬λ‘ λ³κ²½λμμ΅λλ€. (ForeignAccount - didSet)
νμ νλ‘νΌν°
- κ°κ°μ μΈμ€ν΄μ€ νμ
μ΄ μλ νμ
μ체μ μνλ νλ‘νΌν°μ΄λ€.
- νμ
νλ‘νΌν°λ νμ
μ체μ μν₯μ λ―ΈμΉλ νλ‘νΌν°μ΄λ€.
- μΈμ€ν΄μ€μ μμ± μ¬λΆμ μκ΄μμ΄ νμ
νλ‘νΌν°μ κ°μ νλμ΄λ€.
(κ·Έ νμ
μ λͺ¨λ μΈμ€ν΄μ€κ° 곡ν΅μΌλ‘ μ¬μ©νλ κ°, λͺ¨λ μΈμ€ν΄μ€μμ 곡μ©μΌλ‘ μ κ·Όνκ³ κ°μ λ³κ²½ν μ μλ λ³μ)
• μ μ₯ νμ νλ‘νΌν° → λ³μ λλ μμλ‘ μ μΈ
• μ°μ° νμ νλ‘νΌν° → λ³μλ‘ μ μΈ
μ μ₯ νμ νλ‘νΌν°λ λ°λμ μ΄κΈ°κ°μ μ€μ ν΄μΌνκ³ , μ§μ° μ°μ°λλ€.
μ§μ° μ μ₯ νλ‘νΌν°μ λ€λ₯΄κ² λ€μ€ μ€λ λ νκ²½μ΄λΌκ³ νλλΌλ λ¨ ν λ²λ§ μ΄κΈ°νλλ€λ 보μ₯μ λ°λλ€.
π§ μ΄κΈ°κ° μ€μ ν΄μΌνλ μ΄μ π§
μ μ₯ νμ νλ‘νΌν°λ μ μ° λ³μμ²λΌ μ¬μ©λκΈ° λλ¬Έμ νλ‘νΌν°κ° μλ‘ μμ±λμ§ μκ³ , 곡μ λμ΄ μ¬μ©λλ€.
λ°λΌμ μ²μ μ μΈ μ μ΄κΈ°κ°μ μ§μ ν΄λμ§ μμΌλ©΄, μ΄νμ μ΄κΈ°κ°μ λ£μ΄μ€ λ°©λ²μ΄ μλ€.
→ μ΄κΈ°κ°μ μ€μ νμ§ μμΌλ©΄, μ΄κΈ°κ°μ μ€μ νκ±°λ μ°μ° νμ νλ‘ΆνΌν°λ‘ λ§λ€λΌλ errorκ° λΈ
π§ λ³μ, μμ λͺ¨λ μ μ κ°λ₯ν μ΄μ π§
ν΄λΉ νλ‘νΌν° νΈμΆ μ κΉμ§ μ΄κΈ°νκ° λμ§ μλλ€.
λ°λΌμ μμλ‘ μ μνλλΌλ μνλ νμ΄λ°μ νΈμΆνμ¬ μνλ κ°μ ν λΉν μ μλ€.
π§ λ€μ€ μ€λ λ νκ²½μμ ν λ²λ§ μ΄κΈ°ν λλ μ΄μ π§
μ μ λ³μμ κ°μ μν μ νκΈ° λλ¬Έμ λ± ν λ²λ§ μ΄κΈ°νλκ³ λ©λͺ¨λ¦¬μ μ¬λΌκ°λ©΄ μλ‘μ΄ νΈμΆμ΄ μμ μ μκΈ° λλ¬Έμ΄λ€.
μ¬μ©νλ λ°©λ²μ μ μ₯ νλ‘νΌν°, μ°μ° νλ‘νΌν° μμ static ν€μλλ₯Ό λΆμ΄λ©΄ λλ€.
κ·Έλ¬λ©΄ νμ
μ΄λ¦μ ν΅ν΄μ μ κ·Όμ΄ κ°λ₯ν΄μ§λ€.
(→ μΈμ€ν΄μ€κ° μμ±λλ κ²μ΄ μλ, λΆλ¦¬λ μκ° λ©λͺ¨λ¦¬μ μ¬λΌκ°κ³ μ΄νλ‘λ νλ‘νΌν°λ₯Ό 곡μ νλ νν)
μ΄μ΄μ μμ± μμ
'Swift' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Swift] AutomaticDimension (0) | 2024.06.03 |
---|---|
[Swift] νλ‘νΌν°(Property) β - μ μ₯, μ°μ° (0) | 2024.05.28 |
[Swift] for-in κ³Ό forEach (0) | 2024.05.21 |
Swift μΈμ΄λ? (0) | 2024.02.19 |