Swift中的属性和变量有什​​么区别?

Mad*_*rty 2 ios swift

从几个初始教程中,我看到属性属于一个类,并且基本上是C++世界中使用的"全局变量"(在此前编码).我还将变量看作更多只在方法中使用/存储信息的"本地"实体.

然后我遇到了这个Quora线程:https://www.quora.com/Apple-Swift-programming-language/What-is-the-difference-between-a-property-and-a-variable 现在我看到属性正在能够执行与其调用相关的代码.这很酷,但也为我打开了一大堆其他问题.

还有其他简单明了的方法来记住属性和变量之间的区别吗?

123*_*123 7

属性属于对象,而变量则不属于对象.可以声明变量而不必与特定类或其他对象相关联.属性必须与特定对象相关联(即:类,枚举或结构)


zne*_*eak 6

局部变量只是您使用的东西.你可以完全控制这些,如果你在一个函数中改变一个变量,你的函数之外的任何东西都不会知道.如果我编写一个框架并且你使用它,并且我决定改变某个函数的局部变量,那么使用我的框架的应用程序将继续工作,就像没有任何改变一样.

另一方面,课程描述了合同.当您使用课程时,您可以访问他们公开宣传的所有内容.这意味着如果我编写一个框架并使用它,如果我更改或删除了一个类的公共成员,如果您以前使用该成员,则代码将会中断.

因此,在许多语言中,将实例变量标记为公共是不好的做法.没有附加逻辑的实例变量,如果我想在某个时刻触发某个字段更改或者我想完全删除字段(而是在子对象中报告某个值),那么我就卡住了改变公共合同(例如,在一对get/ set方法中转换字段),并可能破坏您的代码.

由于这个原因,Swift使属性成为间接.Swift属性可以被视为大部分的哑值,但是如果您需要从存储值更改为计算值或其他值,则可以在不更改类的接口的情况下执行此操作.这样,您就不会破坏依赖于该属性的现有代码.

  • 谢谢!这很有意义-我从响应中得到的新概念是get / set方法,实际上是属性的计算值与存储值状态。我正在研究的教程尚未深入了解属性。要点:属性*可能很棘手,因为它们是“全局”的,变量更易于控制。 (2认同)