我需要执行didSet
中的代码而不更改属性的值。
最近来自Objective-C,似乎没有setMyProperty()
。
所以我试过了:
self.myProperty = self.myProperty
导致错误Assigning a property to itself
。
由于myProperty
恰好是CGFloat
,我可以这样做:
self.myProperty += 0.0
会触发didSet
并且不会影响该值,但它不会显示我在此处的意思。
有没有办法以更明确/更直接的方式致电didSet
?
答案 0 :(得分:12)
试试这个:
self.myProperty = { self.myProperty }()
答案 1 :(得分:1)
你可以这样做:
struct MyStruct {
var myProperty: CGFloat {
didSet {
myFunc()
}
}
func myFunc() { ... }
}
设置myFunc
时,系统会调用myProperty
。您也可以直接致电myFunc
,例如在您需要didSet
被调用的情况下。
答案 2 :(得分:0)
didSet 。如果您想将其还原为之前的值(因此具有与不更改属性的值相同的效果),您需要为其分配“oldValue”'属性。请注意 oldValue 不是您定义的变量,它是预定义的。
var myProperty: CGFloat {
didSet {
myProperty = oldValue
}
}
答案 3 :(得分:0)
你可以使用一个元组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