当前位置 : 主页 > 手机开发 > 其它 >

是什么使属性成为Swift中的计算属性

来源:互联网 收集:自由互联 发布时间:2021-06-11
让我们从代码片段开始: 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 { //
让我们从代码片段开始:

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等于属性观察者,属性观察者只是变异前后观察者的设置者.

问题:

我想知道是什么使一个属性成为计算属性?是否正确,只要该属性具有getter并返回它是一个计算属性?

2.我的所有理解(a,b& c)是否正确?如果没有,你会很高兴指出.

3.为什么不允许初始化计算属性? (请参见下图)当我这样做时,编译器发出警告不能调用非函数类型的值“int”这个错误的含义是什么?

enter image description here

非常感谢.

首先,这是关于变量,而不是属性.任何变量都可以是计算变量.属性只是使用变量的一种方法.

我认为总的来说,在将存储变量与setter观察者并排放置计算变量时,你犯了一个大错误.他们是无关的!

将计算变量看作是在使用它时看起来和行为类似的变量 – 你得到并且(可能)设置它 – 但实际上是一个函数(或一对函数).它只是一种调用函数的紧凑方式.这就是全部.

另一方面,带有观察者的存储变量只是一个存储的变量,它也有一些观察者.

好的,关于你的问题:

  1. I wonder what makes a property a computed property? Is is correct that as long as the property has a getter and return it is a computed property?

是.它是一个计算变量,因为您使用使其成为计算变量的语法(使用花括号)声明它.

  1. Are all my understandings (a, b & c) correct? If not would be nice of you to point out

是.我认为你的“c”非常有洞察力:计算变量不需要setter观察者,因为它有(喘气!)一个setter!

  1. Why is it not allowed to initialize an computed property? (Please see the figure below) And when I do so the compiler gives out the warning Cannot call value of none-function type “int” What’s the meaning of this error?

没有任何意义,计算变量“有”一个值 – 它被计算!这只是一些功能! – 所以给它分配一个“初始”值是没有意义的.

网友评论