2015-12-30 1 views
6

Ich habe eine generische Klasse zu instanziiert:Xcode 7 Swift 2 unmöglich UIViewController Unterklasse von Generika UITableViewController

class PaginatedTableViewController 
    <GenericElement, Source: PaginationDataSource 
    where Source.PaginatedGenericElement == GenericElement>: 
    UITableViewController 

und eine andere, die ich versuche, von Storyboard zu instanziiert:

class CandidatesTableViewController: 
    PaginatedTableViewController<Match, MatchPaginationDataSource> 

Ich kann nicht finden CandidatesTableViewController im Dropdown-Menü Benutzerdefinierte Klasse. Wenn ich es erzwinge und dann meinen Controller in Code umwandle, stürzt die App zur Laufzeit ab und mein Controller (das sollte eine CandidatesTableViewController-Instanz sein) ist in Wirklichkeit eine UITableViewController-Instanz.

Unbekannte Klasse _TtC21MyProjectName29CandidatesTableViewController in Interface Builder-Datei. Konnte den Wert des Typs 'UITableViewController' (0x1040917f8) nicht in 'MyProjectName.CandidatesTableViewController' (0x1013a9890) umwandeln.

In meinem Projekt dieser Controller in einem anderen eingebettet ist, deshalb habe ich es Stimmen:

tableViewController = (segue.destinationViewController as! CandidatesTableViewController) 

Hat jemand weiß, wie dieses Problem zu lösen?

Antwort

11

Leider sind generische Swift-Klassen für Objective-C-Code nicht sichtbar und werden auch im Interface Builder (in Storyboards und Xibs) nicht unterstützt. Ich finde diese beiden Punkte eng miteinander verbunden.

Als eine Lösung würde ich vorschlagen, Sie Aggregation zu verwenden: Sie nicht sehen Controller allgemein, sondern extrahieren Sie einige Logik in eine andere (generische) Klasse und verwenden Sie es in Ihrem View-Controller.

0

Es ist möglich, wenn Sie Ihre generische VC manuell in Objective-C-Laufzeit manuell über die Methode load(), d. H. Anruf, laden. PaginatedTableViewController.load() in der Init-Methode Ihres App-Delegaten. Idee von https://stackoverflow.com/a/43896830/671580