gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 21:59:35 25 4
gpt4 key购买 nike

让我们从代码片段开始:

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)

以下是我个人对stored和computed属性的一些理解:

a: 只有观察者的属性(willSet 和 didSet)不是计算属性而是存储属性(例如上面代码中的 proA 属性)。

b: 计算属性不能有初始化(见上面代码的注释)。

c: setter 相当于属性观察者,属性观察者就是setter + 变异前后的观察者。

问题:

1. 我想知道是什么让属性成为计算属性?只要属性有一个 getter 并返回它就是一个计算属性,这是否正确?

2. 我的所有理解(a、b 和 c)都正确吗?如果没有,请您指出。

3. 为什么不允许初始化计算属性? (请参见下图)当我这样做时,编译器发出警告 Cannot call value of none-function type "int" What's the meaning of this error?

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 observer 因为它有(喘息!)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?

计算变量“具有”值是没有意义的——它是计算出来的!这只是一些功能! ——所以给它分配一个“初始”值是没有意义的。

关于swift - 什么使属性成为 Swift 中的计算属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39986129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com