Как вызвать didSet без изменения значения свойства
Мне нужен код в didSet
должно быть выполнено без изменения значения свойства.
Исходя из Objective-C в последнее время, кажется, нет setMyProperty()
,
Итак, я попробовал:
self.myProperty = self.myProperty
что приводит к ошибке Assigning a property to itself
,
Так как myProperty
бывает CGFloat
, Я мог бы сделать:
self.myProperty += 0.0
который срабатывает didSet
и не влияет на значение, но это не показывает, что я хочу здесь сделать.
Есть ли способ позвонить didSet
в более четком / прямом смысле?
5 ответов
Вы могли бы сделать:
struct MyStruct {
var myProperty: CGFloat {
didSet {
myFunc()
}
}
func myFunc() { ... }
}
Вот myFunc
будет называться, когда myProperty
установлено. Вы также можете позвонить myFunc
напрямую, например, в той ситуации, в которой вы нуждались didSet
быть названным.
Вы можете использовать кортеж Swift 3
var myProperty : (CGFloat,Bool) = (0.0, false){
didSet {
if myProperty.1 {
myProperty = (0.0, false) // or (oldValue.0, false)
//code.....
}else{
// code.....
}
}
}
myProperty = (1.0, true)
print(myProperty.0) //print 0.0
myProperty = (1.0, false)
print(myProperty.0) //print 1.0
myProperty = (11.0, true)
print(myProperty.0) //print 0.0
didSet вызывается после того, как значение свойства уже было изменено. Если вы хотите вернуть его к его предыдущему значению (что дает тот же эффект, что и изменение значения свойства), вам необходимо присвоить ему свойство oldValue. Обратите внимание, что oldValue не является определенной вами переменной, она предопределена заранее.
var myProperty: CGFloat {
didSet {
myProperty = oldValue
}
}
Я делаю:
let tmp = myProperty
myProperty = tmp
но ответ Орхана Алиханова лучше. Спасибо !