我有一个通用类:
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)
有谁知道如何解决这个问题?
最佳答案
不幸的是,通用Swift类对于Objective-C代码不可见,并且在Interface Builder中(在情节提要和Xibs中)也不受支持。我发现这两点密切相关。
作为解决方案,我建议您使用聚合:不要使您的视图控制器具有通用性,而是将一些逻辑提取到另一个(泛型)类中并在视图控制器中使用它。