Swift中必需的初始化程序
在对类进行子类化时,必需的初始化器起着至关重要的作用。 您可以使用必需的关键字来修饰初始化程序。 添加required关键字可确保子类实现所需的初始化器。
出于以下两个原因,您需要关键字:
- 工厂方法
- 通讯协定
工厂方法
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) 。