Ant*_*ron 6 generics initializer swift
这是我的代码:
public class A<T : Any> {
public init(n : Int) {
print("A")
}
}
public class B : A<Int> {
}
public class C : B {
}
let x = C(n: 123)
Run Code Online (Sandbox Code Playgroud)
这无法编译并大喊这样的错误:
repl.swift:9:9: error: 'C' cannot be constructed because it has no accessible initializers
Run Code Online (Sandbox Code Playgroud)
可以编译以下代码.
public class A {
public init(n : Int) {
print("A")
}
}
public class B : A {
}
public class C : B {
}
let x = C(n: 123)
Run Code Online (Sandbox Code Playgroud)
是否应该继承要求类型指定的泛型类型的初始值设定项?
========以下附加内容=======
"超类初始化器在某些情况下是继承的,但只有在安全且适当的情况下才会继承.有关更多信息,请参阅下面的"自动初始化程序继承"."
--- Apple Inc."Swift编程语言(Swift 2)"iBooks.
还有这个
"但是,如果满足某些条件,则会自动继承超类初始值设定项."
"假设您为在子类中引入的任何新属性提供默认值,则应用以下两个规则:" 规则1 "如果您的子类未定义任何指定的初始值设定项,则它会自动继承其所有超类指定的初始值设定项." 规则2 "如果您的子类提供了所有超类指定初始化程序的实现 - 通过按照规则1继承它们,或者通过提供自定义实现作为其定义的一部分 - 那么它会自动继承所有超类便利初始化程序."
当查看第一个代码时,子类B没有定义任何指定的初始化器,它应该自动继承它的所有超类指定的初始化器,那些来自A<Int>.But的实际上并没有看起来连接到我.
小智 1
那个怎么样 ??我尝试使用覆盖代码和super.init,这不是错误。我认为您不必使用泛型类型来初始化函数。
尝试将重写 init 函数放在 B 类和 C 类中。看起来像这样,
public override init(n:Int) {
super.init(n: n)
}