通过这个简单的类,我得到了编译器 警告
尝试x在自己的设置器/ 获取器中修改/访问
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 } } // ... }
Setter和Getters适用于computed properties;这样的属性在实例中没有存储- 来自getter的值应从其他实例属性中计算出来。在您的情况下,没有x要分配的内容。
computed properties
明确地:“如何在没有明确支持的情况下做到这一点”。您不能-您将需要 一些内容 来备份计算的属性。试试这个:
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