让我们从代码片段开始:
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:计算属性不能有初始化(见上面代码的注释)。
c: setter 相当于属性观察者,属性观察者只是变异前后的 setter + 观察者。
问题:
1.我想知道是什么让属性成为计算属性?只要属性有一个getter并返回它是一个计算属性,这是否正确?
2.我所有的理解(a、b 和 c)都正确吗?如果没有,请您指出。
3.为什么不允许初始化计算属性?(请看下图) 当我这样做时,编译器会发出警告Cannot call value of none-function type "int"这个错误是什么意思?
非常感谢。