Nik*_*nov 9 generics compiler-errors initializer swift
根据Apple的文档,Swift不需要覆盖初始化程序.在以下代码示例中,Bar继承了以下的初始化程序Foo:
class Foo {
let value: Int
init(value: Int = 5) {
self.value = value
}
}
class Bar: Foo {
}
Run Code Online (Sandbox Code Playgroud)
只要我们Foo在class Foo<T> {Xcode中添加一些通用就会给我们带来错误Initializer does not override a designated initializer from its superclass.是否有文件或快速进化讨论解释了为什么会发生这种情况?
更新.通用似乎不是覆盖要求的主要原因.以下是如何定义具有泛型的类的选项,该类不需要覆盖指定的初始化程序:
protocol FooProtocol {
associatedtype T
}
class Foo<U>: FooProtocol {
typealias T = U
let value: Int
init(value: Int, otherValue: T) {
self.value = value
self.otherValue = otherValue
}
}
class Bar: Foo<Int> {
}
Run Code Online (Sandbox Code Playgroud)
然而,还有另一个有趣的行为观察.定义初始化器,如下面的原因覆盖要求:
init(value: Int = 5) {
self.value = value
}
Run Code Online (Sandbox Code Playgroud)
有趣的是,在这样的指定初始值设定项中添加一个以下参数会导致此覆盖要求消失:
init(value: Int = 5, otherValue: T) {
self.value = value
}
Run Code Online (Sandbox Code Playgroud)
更新2.我无法找到这种行为的合理解释,此时我将其报告为编译器错误 - https://bugs.swift.org/browse/SR-1375
| 归档时间: |
|
| 查看次数: |
252 次 |
| 最近记录: |