一尘不染

Xcode 7 Swift 2无法实例化通用UITableViewController的UIViewController子类

swift

我有一个通用类:

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

我尝试从情节提要中实例化的另一个:

class CandidatesTableViewController: 
   PaginatedTableViewController<Match, MatchPaginationDataSource>

CandidatesTableViewController在情节提要中的“自定义类”下拉菜单中找不到。如果我强行使用它,然后将我的控制器转换为代码,则应用程序在运行时崩溃,抱怨我的控制器(应该是CandidatesTableViewController实例)实际上是一个UITableViewController实例。

接口生成器文件中的未知类_TtC21MyProjectName29CandidatesTableViewController。无法将类型’UITableViewController’(0x1040917f8)的值强制转换为’MyProjectName.CandidatesTableViewController’(0x1013a9890)。

在我的项目中,此控制器嵌入到另一个控制器中,这就是我强制转换的原因:

tableViewController = (segue.destinationViewController as! CandidatesTableViewController)

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


阅读 163

收藏
2020-07-07

共1个答案

一尘不染

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

作为一种解决方案,我建议您使用聚合:不要使您的视图控制器具有通用性,而是将某些逻辑提取到另一个(泛型)类中并在视图控制器内部使用它。

2020-07-07