Xcode 7 Swift 2无法实例化通用UITableViewController

时间:2015-12-30 18:13:03

标签: ios swift generics swift2

我有一个通用类:

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

和我试图从故事板中实例化的另一个:

class CandidatesTableViewController: 
   PaginatedTableViewController<Match, MatchPaginationDataSource>

我无法在故事板自定义类下拉菜单中找到CandidatesTableViewController。如果我强制它然后在代码中转换我的控制器,应用程序在运行时崩溃抱怨我的控制器(应该是CandidatesTableViewController实例)实际上是一个UITableViewController实例。

  

未知类_TtC21MyProjectName29CandidatesTableViewController in   Interface Builder文件。   无法转换类型的值   &#39;的UITableViewController&#39; (0x1040917f8)来   &#39; MyProjectName.CandidatesTableViewController&#39; (0x1013a9890)。

在我的项目中,这个控制器嵌入了另一个控制器,这就是我投射它的原因:

tableViewController = (segue.destinationViewController as! CandidatesTableViewController)

有人知道如何解决这个问题吗?

2 个答案:

答案 0 :(得分:11)

不幸的是,通用的Swift类对于Objective-C代码是不可见的,并且在Interface Builder(在storyboards和xibs中)也不受支持。我发现这两点密切相关。

作为一种解决方案,我建议你使用聚合:不要让你查看控制器通用,而是将一些逻辑提取到另一个(通用)类并在视图控制器中使用它。

答案 1 :(得分:0)

如果您通过load()方法手动将通用VC手动加载到Objective-C运行时,即调用。您的app delegate的init方法中的PaginatedTableViewController.load()。来自https://stackoverflow.com/a/43896830/671580

的想法