Swift二传手和吸气剂问题

时间:2014-07-08 04:33:10

标签: ios swift

我知道有一些与此有关的问题。我知道swift只能为计算属性定制属性setter和getter。但我认为这是Swift最糟糕的部分。这是因为:

  1. 所有变量都暴露在外面。没有私人或公共财产。
  2. 无法访问属性的“内部”变量,例如objective-c,_variable
  3. 我的代码是这样的:

    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再次被调用。

    有什么想法吗?感谢

1 个答案:

答案 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;
  }
}
  
      
  1. 所有变量都暴露在外面。没有私人或公共财产。
  2.   
  3. 无法访问"内部"属性的变量,如objective-c,_variable
  4.   

根据我的理解,privateValue将无法在本地范围之外的任何地方访问,这将解决您的两个投诉。 (编辑:可访问性可能有误;请参阅注释。)