Swift语言:如何使用观察者定义计算变量?
我对斯威夫特是个新手,喜欢玩语言。我已经学习了计算变量和变量观测器的概念。我想知道,当我定义一个变量时,是否可以同时定义这两个变量。我试过了,但失败了。下面是我的代码(不工作!)Swift语言:如何使用观察者定义计算变量?,swift,variables,Swift,Variables,我对斯威夫特是个新手,喜欢玩语言。我已经学习了计算变量和变量观测器的概念。我想知道,当我定义一个变量时,是否可以同时定义这两个变量。我试过了,但失败了。下面是我的代码(不工作!) 我想知道,这可能吗?谢谢。我认为属性观察员只能应用于存储的属性。 计算属性和属性观察器的相似之处在于,当属性的值发生变化时,它们都会被调用,我们甚至可以将计算属性视为属性观察器 因此,我认为我们不能用observer定义一个计算变量。简而言之,这是不可能的 我认为计算属性和存储属性的概念是完全不同的 谈到存储属性,请将
我想知道,这可能吗?谢谢。我认为属性观察员只能应用于存储的属性。 计算属性和属性观察器的相似之处在于,当属性的值发生变化时,它们都会被调用,我们甚至可以将计算属性视为属性观察器
因此,我认为我们不能用observer定义一个计算变量。简而言之,这是不可能的 我认为计算属性和存储属性的概念是完全不同的 谈到存储属性,请将其视为成员变量,以便在设置或分配属性时了解其功能。它们是存储的而不是计算的,因此可以为它们赋值,也可以由定义类之外的其他类或方法设置或赋值 对于计算属性,每次访问时都会计算它们,因此不会存储它们。我觉得即使是设置的想法也不符合计算属性,因为如果您设置它,它不是计算的 对于属性中的setter,您知道何时设置或分配它,因此不需要willSet或didSet
var myProp: String {
set {
//You know it is being set here. :-)
//No need of an event to tell you that!
}
}
对于计算属性,观察者不会真正增加太多。很容易在集合函数中进行等效,如下所示:
set {
// do willSet logic here
let oldValue = a
a = newValue + 1
// do didSet logic here
}
如果willSet或didSet逻辑很复杂,可以将其重构为成员函数,如willSetA或didSetA 这是做不到的:
Welcome to Swift version 1.2. Type :help for assistance.
1> class Foo {
2. var bar : Int {
3. get { return 1 }
4. willSet { println ("will") }
5. }
6. }
repl.swift:3:9: error: willSet variable may not also have a get specifier
get { return 1 }
^
错误消息描述了原因。Swift语言指南明确表示如下 您不需要为未重写的计算属性定义属性观察员,因为您可以在计算属性的setter中观察并响应对其值的更改。属性重写在重写中进行了描述
因此,“Set{}”-setter本身将充当观察者 以上内容不会编译-放错大括号。
Welcome to Swift version 1.2. Type :help for assistance.
1> class Foo {
2. var bar : Int {
3. get { return 1 }
4. willSet { println ("will") }
5. }
6. }
repl.swift:3:9: error: willSet variable may not also have a get specifier
get { return 1 }
^