Nach dem Konvertieren in Swift 3 habe ich Probleme mit Sichtbarkeit von Obj-C (Interface Builder kann die Controller-Klasse zur Laufzeit nicht finden). So habe ich @objc
zu debuggen:Swift 3: Xcode behauptet, dass eine generische Klasse generisch ist
@objc(ASSitesTableViewController)
class ASSitesTableViewController : GenericFRCTableVC<Site>
Und Xcode spuckt zurück:
Generisches Unterklassen von ‚@objc‘ Klassen können keine explizite haben ‚@objc‘ Attribut, weil sie nicht direkt sichtbar sind Objective -C
Aber die Klasse ist nicht wirklich generisch. Es erbt nur von einer Klasse, die spezialisiert wurde.
Ich bin mir bewusst, dass Unterklasse eine spezialisierte Art ist eine lange Geschichte, da es in früheren Versionen von Swift nicht unterstützt wurde, aber es kompiliert ohne Beschwerden. Ich habe nicht erwartet, dass meine Klasse bleibt generisch.
Ich fand keine Erwähnung von Generika im Vererbungsabschnitt der Swift-Dokumente oder umgekehrt.
Muss die Basisklasse nicht-generisch sein, damit die Unterklasse für Obj-C sichtbar ist?
Danke für die Bestätigung. Das größere Problem entstand aufgrund von Swift 3, da der FRC (Holed Results Controller) in dieser Version generisch gemacht wurde, die ich erfolglos versuchte, die Kette entlang zu verbreiten. – Andreas
Ich weiß - ich hatte eine Reihe von Schwierigkeiten mit den neuen importierten Generika. Beachten Sie jedoch, dass importierte Generika _kovariant_ im parametrisierten Typ sind. Das kann in vielen Situationen helfen. – matt
Alle von ihnen? Klingt eher nach Sicherheit als nach einer Funktion, aber ich konnte keine Dokumentation dieses Verhaltens finden. Ich denke, gewöhnliche Arrays verhielten sich auch so bis Swift 2. https://youtu.be/n9yAJfYjcl4?t=39m6s – Andreas