一尘不染

财产获取者和安置者

swift

通过这个简单的类,我得到了编译器 警告

尝试x在自己的设置器/ 获取器中修改/访问

当我这样使用它时:

var p: point = Point()
p.x = 12

我得到一个EXC_BAD_ACCESS。没有明确的支持,我该怎么办?

class Point {

    var x: Int {
        set {
            x = newValue * 2 //Error
        }
        get {
            return x / 2 //Error
        }
    }
    // ...
}

阅读 201

收藏
2020-07-07

共1个答案

一尘不染

Setter和Getters适用于computed properties;这样的属性在实例中没有存储-
来自getter的值应从其他实例属性中计算出来。在您的情况下,没有x要分配的内容。

明确地:“如何在没有明确支持的情况下做到这一点”。您不能-您将需要 一些内容 来备份计算的属性。试试这个:

class Point {
  private var _x: Int = 0             // _x -> backingX
  var x: Int {
    set { _x = 2 * newValue }
    get { return _x / 2 }
  }
}

具体来说,在Swift REPL中:

 15> var pt = Point()
pt: Point = {
  _x = 0
}
 16> pt.x = 10
 17> pt
$R3: Point = {
  _x = 20
}
 18> pt.x
$R4: Int = 10
2020-07-07