【发布时间】:2017-02-22 16:41:21
【问题描述】:
我试图理解为什么 Swift 强制使用一个符合协议的类,并且初始化器被标记为必需的。这实质上强制任何子类也实现该初始化程序。指定的超类初始化器肯定会被继承吗?
以下引述摘自 Swift 语言指南: https://developer.apple.com/library/prerelease/content/documentation/Swift/Conceptual/Swift_Programming_Language/Protocols.html#//apple_ref/doc/uid/TP40014097-CH25-ID272
您可以在符合要求的情况下实现协议初始值设定项要求 类作为指定初始化器或便利初始化器。 在这两种情况下,您都必须使用 所需的修饰符:
class SomeClass: SomeProtocol {
required init(someParameter: Int) {
// initializer implementation goes here
}
}
class SomeSubclass: SomeClass {
required init(someParameter: Int) { // enforced to implement init again
// initializer implementation goes here
}
}
使用 required 修饰符可确保您提供显式 或继承所有初始化器要求的实现 符合类的子类,这样它们也符合 协议。
编辑: 我最初并没有提到我目前仅限于 Swift 2.1。这似乎是此版本中的编译器问题,并且在以后的版本中不会出现。
【问题讨论】:
标签: swift inheritance swift-protocols