swift – 如何满足包含初始化程序的协议?

前端之家收集整理的这篇文章主要介绍了swift – 如何满足包含初始化程序的协议?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我定义了一个简单的类:
  1. class MyClass {
  2. var name:String?
  3.  
  4. required init() {
  5. println("init")
  6. }
  7. }

我可以在这样的扩展中添加一个新的初始化器:

  1. extension MyClass {
  2. convenience init(name: String) {
  3. self.init()
  4. self.name = name
  5. }
  6. }

一切都很好

但是一旦我在协议中定义了新的初始化器:

  1. protocol MyProtocol {
  2. init(name:String)
  3. }

并使我的扩展程序确认该协议:

  1. extension MyClass : MyProtocol {
  2. convenience init(name: String) {
  3. self.init()
  4. self.name = name
  5. }
  6. }

我收到以下错误

Initializer requirement ‘init(name:)’ can only be satisfied by a
required initializer in the definition of non-final class ‘MyClass’

这里发生了什么?

(BTW:我不能让我的课最后,因为这只是一个更复杂的用例的提取。)

好的,我的坏

为了保证所有子类符合MyProtocol,新的初始化器都必须被标记为必需的。

此外,Swift要求在类中直接声明所有必需的初始值,并且不允许在扩展中声明它们。

猜你在找的Swift相关文章