Ответ 1
Как и многие другие, вы можете использовать willSet
для обнаружения изменений. Однако при переопределении вам не нужно присваивать значение супер, вы просто наблюдаете существующее изменение.
Несколько вещей, которые вы можете наблюдать со следующей игровой площадки:
- Переопределение свойства для
willSet/didSet
по-прежнему вызывает super дляget/set
. Вы можете сказать, что состояние изменяется от.normal
до.selected
. - willSet и didSet вызывается, даже когда значение не изменяется, поэтому вы, вероятно, захотите сравнить значение
selected
сnewValue
вwillSet
илиoldValue
вdidSet
, чтобы определить, или не анимировать.
import UIKit
class MyButton : UIButton {
override var isSelected: Bool {
willSet {
print("changing from \(isSelected) to \(newValue)")
}
didSet {
print("changed from \(oldValue) to \(isSelected)")
}
}
}
let button = MyButton()
button.state == .normal
button.isSelected = true // Both events fire on change.
button.state == .selected
button.isSelected = true // Both events still fire.