Swift计算的属性
在第一篇文章中,我将介绍计算属性以及如何使用Getters和Setters,以尝试将我在使用Swiftlang功能时学到的东西写在纸上。
计算属性
在跳入之前,需要了解一些重要的事情:
- 将它们视为一段代码,每次调用它们时都会计算出一个值
- 计算属性始终是变量(从不常量)
- 这些类型的属性可以在类,结构,枚举的内部或外部使用
当使用计算属性时要当心,因为它们的值可能在每次调用它们时都会改变。 而且,如果使用了setter,它们可以在其封闭范围内更改任何其他值(更多信息在下面)!
定义计算属性
首先,您必须编写一个变量并显式声明属性的类型,以帮助编译器知道将为其分配哪种类型的值。
不要分配默认值。 而是在类型声明之后打开方括号,然后开始使用吸气剂。
由于变量的值是通过使用setter和getter进行设置和检索的,因此您至少需要在方括号内使用getter,如下所示:
上面的代码中发生了什么:
- 您可以看到Int类型的计算属性,并且在其括号内,我使用吸气剂返回x + y的结果
- 一旦计算出的属性被调用,getter就被执行并且变量被赋值给结果
- 清理注意事项 :只要不实现setter,就不需要编写get {}。 这将加快您的写作速度
让我们谈谈获取器和设置器:
使用get {}
- get关键字使计算出的属性可读
- 使用getter可以从计算属性读取数据
- 在方括号内,编写代码,一旦计算属性被调用,该代码将被执行
- 访问该属性将执行getter
尝试为计算变量分配一个值。 发生了什么?
您不能将值分配给没有设置器的计算属性。
使用set {}
要了解的几件事:
- 关键字s et使计算出的属性可写。 没有它,您将收到以下错误: 无法分配值[您的计算属性的名称],它是仅获取属性。
- 当您为计算的属性分配值时,您正在调用设置器
- 该值可在设置器的括号内访问
- 您可以在set关键字后的括号内分配一个本地名称。 该局部变量将传递的值传递给计算属性(如在下例中使用newSalaryPerWeek所示)
- 如果您未在setter定义中提供分配值的名称,则编译器将自动分配newValue的名称。
- 通过设置,您可以更改同一作用域中其他属性的值,这是您必须知道链接到计算属性的所有依赖项的原因。
有点令人困惑,但这是计算属性能力的一个很好的例子,如下所示:
为什么不使用setter更改其自己的计算属性的值?
因为我会陷入一个无限循环中,一次又一次地将值分配给它自己。 在家尝试this
让我们将此知识应用于其他几个计算属性,但是这次在Enums / Structs / Classes内部,只是看到没有任何变化:
- 枚举中的计算属性
在下面,您可以找到两个在枚举中使用计算属性的示例:
- 第一个示例具有一个计算属性,该属性使用switch语句在Enum中可用的大小写之间进行切换,并基于该特定实例中选择的大小写返回String。
- 第二个示例定义了一个只读的计算属性(因为它仅具有一个getter),该属性在这种情况下在被调用时返回一个特定的String。
- 由于这些计算的属性没有设置器,因此可以省略get关键字(节省键入时间)。
2.结构中的计算属性
下面我们有一个相同的计算属性示例,但是这次是在名为Employee的结构中。
3.类中的计算属性
下面的示例使用具有2个存储属性和1个计算属性的类。
计算的属性根据存储的宽度和高度的属性返回矩形的面积,但是,通过设置器,我们可以根据对矩形的面积的输入来更改宽度和高度的值,如下所示:见下文。
由于这非常重要,因此我再次提到计算属性可以更改其范围内的任何其他值。 这会造成很多麻烦。
为什么计算的属性有用? 仍在设法弄清楚……
现在就这样。 第2部分将介绍财产观察员。
资源:
- Swift编程:《大书呆子牧场指南》
- 学习Swift 3-O’Reilly