недвижимости наблюдатель является то, что вы ищете:
Наблюдатели за объектом наблюдают и повторно ссылаются на изменения значения свойства. Наблюдатели свойств вызывается каждый раз, когда значение свойства равно , даже если новое значение совпадает с текущим значением свойства.
Итак, давайте скажем, вы хотите, чтобы наблюдать изменение a
собственности, вы можете реализовать его как:
class Triangle {
var a: Int? {
willSet {
print("the new value is about to be: \(newValue)")
}
didSet {
print("the old value was: \(oldValue)")
}
}
var b: Int?
var c: Int?
// initialization stuff
// ...
}
Вызов (трассировки):
let myTriangle = Triangle()
myTriangle.a = 10
// this will print:
// the new value is about to be: Optional(10)
// the old value was: nil (nil because it's optional...)
// re-assign a new value:
myTriangle.a = 20
// this will print:
// the new value is about to be: Optional(20)
// the old value was: Optional(10)
Как вы можете видеть, это сообщит вам, что значение a
было изменено, а также указано, какие старые и новые значения.
Таким образом, реализуя как наблюдатель свойства, вы можете добавить свое пользовательское поведение при изменении значения a
; Скажем -для ПРИМЕР- вы хотите, чтобы c
должен быть равен новому значению a
, если он изменяет:
var a: Int? {
willSet {
print("the new value is about to be: \(newValue)")
b = newValue
}
didSet {
print("the old value was: \(oldValue)")
}
}
Или вы ПРИМЕР- свой-хотите вызвать функцию, чтобы сделать что-то при изменении значения из a
:
var a: Int? {
willSet {
print("the new value is about to be: \(newValue)")
doSomething()
}
didSet {
print("the old value was: \(oldValue)")
}
}
private func doSomething() {
print("doing something...")
}
для получения дополнительной информации, я рекомендую проверить Apple Documentation - раздел "наблюдатели недвижимости".
Надеюсь, это помогло.
Просьба указать некоторый относительный код для реальной проблемы. Как этот код поможет OP? –
Он будет знать, что делать в следующий раз, этот метод работает для меня несколько раз –
Согласен. 'didSet' поможет –