Swift中必需的初始化程序

在对类进行子类化时,必需的初始化器起着至关重要的作用。 您可以使用必需的关键字来修饰初始化程序。 添加required关键字可确保子类实现所需的初始化器。

出于以下两个原因,您需要关键字:

  1. 工厂方法
  2. 通讯协定

工厂方法

draw方法仅接受String并返回Self的实例。 Self是指调用draw方法的当前类型。 这可以是Shape类或其子类之一。

draw方法返回Self的原因是每个子类的Self都不相同。 如果该方法返回Shape实例,则绘制将无法返回Circle实例,例如Rectangle。 但是你还没有。 这给出了以下错误。

draw在Shape或Shape子类上调用init(shape:)初始化程序。 但是编译器如何确保子类将具有init(name:)初始化程序? required名称将帮助编译器弄清楚

初始化程序引发错误,因为draw方法引用 self.init ,它需要保证子类实现此方法。 在指定的初始化程序中添加一个required关键字将强制子类实现该初始化程序,从而满足此要求。

解决方案

首先,您将share关键字添加到初始化程序中。

2协议

协议是必需关键字存在的第二个原因。

当协议具有初始化程序时,采用该协议的类必须使用必需的关键字修饰该初始化程序。 让我们看看为什么以及如何运作。

首先,介绍一个名为NameDelegate的协议,其中包含一个初始化程序。

在这一点上,编译器仍然不满意。 因为Employee符合NameDelegate协议,所以其子类也必须符合此协议并实现init(name:String)