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

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

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

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

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

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

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

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

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