Ich bin in einem Fehler, wo ich nicht sicher bin, ob es eine Einschränkung der Swift-Sprache oder ein Fehler ist. Hier ist die grundlegendste Prämisse:Subclassing Swift Generic Class mit NSObject Vererbung
class GenericClass<T> : NSObject {
var inputValue: T
init(value: T) {
self.inputValue = value
super.init()
}
}
class SubClass : GenericClass<String> {
override init(value: String) {
super.init(value: value)
}
}
var test = GenericClass(value: "test") //Succeeds
var test2 = SubClass(value: "test2") //Fails with EXC_BAD_ACCESS
Ich bekomme keine Compiler-Warnungen hier, aber die Unterklasse weigert sich zu instanziieren. Ich habe ein komplizierteres Ziel innerhalb der Untergliederung spezifischer Kontexte eines Generikums, aber dieses grundlegende Problem oben ist, worauf ich es hindeutete.
Interessanterweise, wenn ich die NSObject-Vererbung auf der GenericClass (und der super.init() von der Init-Methode des Generik) entfernen, funktioniert diese Einrichtung ohne Problem, also denke ich, dass es etwas damit zu tun haben muss Ich erben von NSObject. Meine vollständige Implementierung MUSS von einer NSOperation erben (ich mache im Grunde benutzerdefinierte NSOperation-Klassen mit einer generischen Oberklasse), so dass das Erben von NSObject (d. H. NSOperation) für mich nicht optional ist.
Es ist störend, dass es keine Compilerfehler gibt und ich etwas so fies wie ein EXC_BAD_ACCESS bekomme. Es lässt mich denken, dass das vielleicht funktionieren soll, aber momentan nicht. Ich weiß, dass sie erst kürzlich damit begonnen haben, die Unterklassenbildung in Swift zu unterstützen. Ich betreibe die neueste xCode Beta 6.
Jeder Einblick geschätzt!
Danke für die Antwort Aaron. Ich stimme zu, es riecht wie ein Käfer. Ich habe einen Fehlerbericht eingereicht. Wir werden sehen, was passiert :) Wird in der Zwischenzeit Ihre Protokoll-Idee einen Schuss geben. – erendiox
Ja, ich glaube, das war tatsächlich ein Fehler. Es ist jetzt in Swift 3 behoben, und es wurde in Swift 3 Language Changes nicht erwähnt: https://swift.org/blog/swift-3-0-released/ – ganzogo