![](/img/trans.png)
[英]Swift: how to change a property's value without calling its didSet function
[英]How to call didSet without changing property value
我需要在不改变属性值的情况下执行didSet
的代码。
最近来自Objective-C,似乎没有setMyProperty()
。
所以我尝试过:
self.myProperty = self.myProperty
导致错误Assigning a property to itself
。
因为myProperty
恰好是CGFloat
,我可以这样做:
self.myProperty += 0.0
它确实触发了didSet
并且不会影响该值,但它没有显示我在这里的意思。
有没有办法以更清晰/直接的方式调用didSet
?
试试这个:
self.myProperty = { self.myProperty }()
你可以这样做:
struct MyStruct {
var myProperty: CGFloat {
didSet {
myFunc()
}
}
func myFunc() { ... }
}
myFunc
myProperty
时将调用myFunc
。 您也可以直接调用myFunc
,例如在您需要didSet
的情况下。
在属性值已经更改之后调用didSet 。 如果要将其还原为之前的值(因此具有与不更改属性值相同的效果),则需要为其指定“oldValue”属性。 请注意, oldValue不是您定义的变量,它是预定义的。
var myProperty: CGFloat {
didSet {
myProperty = oldValue
}
}
你可以使用一个元组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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.