Swift类:基础知识

描述:类与结构非常相似,但是在决定使用哪种结构时要知道有重要的区别。

使它们与众不同的是,类可以从其他类继承,具有反初始化器并允许对一个类实例的多个引用。 结构不能做这些事情。

声明一个类与使用结构完全一样,但是从关键字class开始。

属性:类,因为结构可以具有存储的属性或计算的属性。 存储的属性可以具有观察者,计算的属性可以具有setter和getter(请参见Swift计算属性)。

如果为所有属性提供默认值,则似乎不需要使用初始化程序。 在这种情况下,我们正是这样做的。 初始化程序即将推出,然后我们将删除默认值。

方法:与类关联的函数是否与结构相同。 但是,与结构不同,如果要更新类中的属性值,则无需为方法使用关键字mutating。

初始化器:类没有默认的初始化器(结构具有默认的初始化器),这意味着您需要创建自己的初始化器,以便所有属性都具有值。

如下所示,即使已分配了默认值,初始化器也将为类的属性分配值。

继承定义了一种关系,在该关系中可以根据超类定义子类。 继承是类和结构之间的主要区别。

  • 子类继承了超类的所有功能(属性,方法,下标),并可以通过点语法对其进行访问。
  • 如下所示,我创建了子类InheritanceExample ,该子类继承BudgetTest的所有功能。
  • 无需在子类中设置任何功能,就可以使用超类的初始化程序创建InheritanceExample的实例,
  • 我可以通过点语法访问超类功能。

子类也可以放置其自身的功能

  • 在下面的代码中, printDescriptionownFeature特定于此类。
  • 您还可以注意到使用了super.init,它调用了超类的初始化程序。 初始化子类的过程如下:首先初始化子类的属性,然后调用超类的初始化程序以将值设置为其自身的属性。

覆盖方法,属性和下标:我们使用关键字override来指示子类将根据您要更改的内容来更改属性,方法或下标。

Override要求编译器验证超类是否具有可以被覆盖的匹配声明,如果不存在匹配则抛出错误。

如果在某些示例中遇到了关键字super ,请知道它用于访问超类的功能。

请参阅以下示例:

在上面的代码中,我重写了一个方法,并通过使用super关键字调用了该方法的超类实现 这使我可以扩展该超类的方法,因为可以为其添加新功能。

防止超越? 在变量,方法之前使用关键字final