2015-12-30 11 views
6

的UIViewController子類我有一個泛型類:的Xcode 7斯威夫特2無法實例化通用的UITableViewController

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

,另一個是我嘗試從故事板實例:

class CandidatesTableViewController: 
    PaginatedTableViewController<Match, MatchPaginationDataSource> 

我無法找到故事板自定義類下拉菜單中的CandidatesTableViewController。如果我強制它,然後在代碼中投我的控制器,應用程序崩潰在運行時抱怨我的控制器(這應該是一個CandidatesTableViewController實例)實際上是一個UITableViewController實例。

未知類_TtC21MyProjectName29CandidatesTableViewController在 Interface Builder文件中。 無法將 'UITableViewController'(0x1040917f8)類型的值轉換爲 'MyProjectName.CandidatesTableViewController'(0x1013a9890)。

在我的項目該控制器嵌入在一個又一個,這就是爲什麼我投它:

tableViewController = (segue.destinationViewController as! CandidatesTableViewController) 

是否有任何人知道如何解決這個問題?

回答

11

不幸的是,通用Swift類對於Objective-C代碼是不可見的,並且在Interface Builder(故事板和xibs)中也不受支持。我發現這兩點密切相關。

作爲一個解決方案,我建議你使用聚合:不要讓你看到控制器的通用,但提取一些邏輯到另一個(通用)類,並在你的視圖控制器內使用它。

0

如果您通過load()方法(即調用)手動將您的通用VC手動加載到Objective-C運行庫中,這是可能的。 PaginatedTableViewController.load()在您的應用程序委託的init方法中。來自https://stackoverflow.com/a/43896830/671580的想法