【发布时间】:2017-02-20 12:27:46
【问题描述】:
让我们从代码sn-p开始:
St Foo {
var proA: Int = 0 { // needs initialization
willSet {
print("about to set proA to \(newValue) from \(proA)")
}
didSet {
print("already set proA to \(proA) from \(oldValue)")
}
}
var ProB: Int { // do not needs initialization
return 1
}
}
let foo = Foo()
foo.proA = 23
print(foo.ProB)
以下是我个人对存储和计算属性的一些理解:
a:只有观察者的属性(willSet 和 didSet)不是计算属性,而是存储属性(例如上面代码中的 proA 属性)。
b:计算属性不能有初始化(见上面代码的cmets)。
c: setter 有点等于属性观察者,属性观察者只是变异前后的 setter + 观察者。
问题:
1. 我想知道是什么让属性成为计算属性?只要属性有一个getter并返回它是一个计算属性,这是否正确?
2. 我的所有理解(a、b 和 c)都正确吗?如果没有,请您指出。
3. 为什么不允许初始化计算属性? (请看下图)当我这样做时,编译器会发出警告 Cannot call value of none-function type "int" 这个错误是什么意思?
非常感谢。
【问题讨论】:
标签: swift properties computed-properties property-observer