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内部,只是看到没有任何变化:

  1. 枚举中的计算属性

在下面,您可以找到两个在枚举中使用计算属性的示例:

  • 第一个示例具有一个计算属性,该属性使用switch语句在Enum中可用的大小写之间进行切换,并基于该特定实例中选择的大小写返回String。
  • 第二个示例定义了一个只读的计算属性(因为它仅具有一个getter),该属性在这种情况下在被调用时返回一个特定的String。
  • 由于这些计算的属性没有设置器,因此可以省略get关键字(节省键入时间)。

2.结构中的计算属性

下面我们有一个相同的计算属性示例,但是这次是在名为Employee的结构中。

3.类中的计算属性

下面的示例使用具有2个存储属性和1个计算属性的类。

计算的属性根据存储的宽度和高度的属性返回矩形的面积,但是,通过设置器,我们可以根据对矩形的面积的输入来更改宽度和高度的值,如下所示:见下文。

由于这非常重要,因此我再次提到计算属性可以更改其范围内的任何其他值。 这会造成很多麻烦。

为什么计算的属性有用? 仍在设法弄清楚……

现在就这样。 第2部分将介绍财产观察员。

资源:

  • Swift编程:《大书呆子牧场指南》
  • 学习Swift 3-O’Reilly