我试图理解为什么Swift强制执行符合协议的类,并将初始化程序标记为必需。这实质上强制任何子类也实现该初始化程序。当然,指定的超类初始化程序会被继承吗?
您可以在符合标准上实现协议初始化程序要求 class作为指定的初始化程序或便捷初始化程序。 在这两种情况下,您都必须使用标记初始化程序实现 必需的修饰符:
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
}
}
使用必需的修饰符可确保您提供显式 或者继承所有的初始化程序要求的实现 符合类的子类,使它们也符合 协议
修改 我最初没有提到我目前仅限于Swift 2.1。它似乎是此版本中的编译器问题,并且不会在更高版本中出现。
答案 0 :(得分:2)
您不会强制在子类中实现初始值设定项。考虑这个例子,编译得很好:
protocol SomeProtocol {
init(someParameter: Int)
}
class SomeClass: SomeProtocol {
required init(someParameter: Int) {
// initializer implementation goes here
print(someParameter)
}
}
class SomeSubclass: SomeClass {
// Notice that no inits are implemented here
}
_ = SomeClass(someParameter: 123)
_ = SomeSubclass(someParameter: 456)