我知道有一些与此有关的问题。我知道swift只能为计算属性定制属性setter和getter。但我认为这是Swift最糟糕的部分。这是因为:
我的代码是这样的:
var value : Float = 0.0 {
willSet {
setValue(newValue, animated: false)
}
}
func setValue(newValue:Float, animated:Bool) {
if(newValue != self.value) {
// TODO: this will cause problem because I there is no alternative way like Objective-c to access _value
self.value = ....
// do whatever I want
}
}
问题是在Objective-c中没有_value,self.value将导致值的willSet再次被调用。
有什么想法吗?感谢
答案 0 :(得分:4)
willSet
没有定义一个setter。 set
确实如此。
var privateValue: Float = 0.0;
var value: Float {
set(newValue) {
if newValue != privateValue {
privateValue = newValue;
// do whatever I want
}
}
get {
return privateValue;
}
}
- 所有变量都暴露在外面。没有私人或公共财产。
- 无法访问"内部"属性的变量,如objective-c,_variable
醇>
根据我的理解,privateValue
将无法在本地范围之外的任何地方访问,这将解决您的两个投诉。 (编辑:可访问性可能有误;请参阅注释。)