Swift类:基础知识
描述:类与结构非常相似,但是在决定使用哪种结构时要知道有重要的区别。
使它们与众不同的是,类可以从其他类继承,具有反初始化器并允许对一个类实例的多个引用。 结构不能做这些事情。
声明一个类与使用结构完全一样,但是从关键字class开始。
属性:类,因为结构可以具有存储的属性或计算的属性。 存储的属性可以具有观察者,计算的属性可以具有setter和getter(请参见Swift计算属性)。
如果为所有属性提供默认值,则似乎不需要使用初始化程序。 在这种情况下,我们正是这样做的。 初始化程序即将推出,然后我们将删除默认值。
方法:与类关联的函数是否与结构相同。 但是,与结构不同,如果要更新类中的属性值,则无需为方法使用关键字mutating。
初始化器:类没有默认的初始化器(结构具有默认的初始化器),这意味着您需要创建自己的初始化器,以便所有属性都具有值。
如下所示,即使已分配了默认值,初始化器也将为类的属性分配值。
继承定义了一种关系,在该关系中可以根据超类定义子类。 继承是类和结构之间的主要区别。
- 子类继承了超类的所有功能(属性,方法,下标),并可以通过点语法对其进行访问。
- 如下所示,我创建了子类InheritanceExample ,该子类继承了BudgetTest的所有功能。
- 无需在子类中设置任何功能,就可以使用超类的初始化程序创建InheritanceExample的实例,
- 我可以通过点语法访问超类功能。
子类也可以放置其自身的功能
- 在下面的代码中, printDescription和ownFeature特定于此类。
- 您还可以注意到使用了super.init,它调用了超类的初始化程序。 初始化子类的过程如下:首先初始化子类的属性,然后调用超类的初始化程序以将值设置为其自身的属性。
覆盖方法,属性和下标:我们使用关键字override来指示子类将根据您要更改的内容来更改属性,方法或下标。
Override要求编译器验证超类是否具有可以被覆盖的匹配声明,如果不存在匹配则抛出错误。
如果在某些示例中遇到了关键字super ,请知道它用于访问超类的功能。
请参阅以下示例:
在上面的代码中,我重写了一个方法,并通过使用super关键字调用了该方法的超类实现。 这使我可以扩展该超类的方法,因为可以为其添加新功能。
防止超越? 在变量,方法之前使用关键字final