Oto mój kod:Inicjatory typów ogólnych nie odziedziczą szybko?
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)
To nie kompilację i krzyczy taki błąd:
repl.swift:9:9: error: 'C' cannot be constructed because it has no accessible initializers
Poniższy kod może zostać skompilowany.
public class A {
public init(n : Int) {
print("A")
}
}
public class B : A {
}
public class C : B {
}
let x = C(n: 123)
nie powinien typy wymogi wymienione inicjalizatory RODZAJE być dziedziczone?
======== ======= dodatkowe Poniżej
“Superclass initializers are inherited in certain circumstances, but only when it is safe and appropriate to do so. For more information, see Automatic Initializer Inheritance below.”
---Apple Inc. “The Swift Programming Language (Swift 2)” iBooks.
A to
“However, superclass initializers are automatically inherited if certain conditions are met.”
“Assuming that you provide default values for any new properties you introduce in a subclass, the following two rules apply:” Rule 1 “If your subclass doesn’t define any designated initializers, it automatically inherits all of its superclass designated initializers.” Rule 2 “If your subclass provides an implementation of all of its superclass designated initializers—either by inheriting them as per rule 1, or by providing a custom implementation as part of its definition—then it automatically inherits all of the superclass convenience initializers.”
Patrząc na pierwszego kodu, podklasa B
nie robi Zdefiniuj wszelkie wyznaczone inicjalizatory, powinno automatycznie dziedziczyć wszystkie jego nadklasy wyznaczone inicjalizatory, te z A<Int>
. Ale tak naprawdę nie, które wydaje się być podłączone do mnie.
Zaobserwowano również tutaj: http://stackoverflow.com/questions/31040044/swift-generic-superclass-init-not-accesible-when-construcing-its-subclass. –
ktoś złożył bilet w szybkim jirku https://bugs.swift.org/projects/SR/issues/SR-416 –
@AnthonyKong Tak, to ja. – AntiMoron