我有一个通用类:
class PaginatedTableViewController <GenericElement, Source: PaginationDataSource where Source.PaginatedGenericElement == GenericElement>: UITableViewController
我尝试从情节提要中实例化的另一个:
class CandidatesTableViewController: PaginatedTableViewController<Match, MatchPaginationDataSource>
我CandidatesTableViewController在情节提要中的“自定义类”下拉菜单中找不到。如果我强行使用它,然后将我的控制器转换为代码,则应用程序在运行时崩溃,抱怨我的控制器(应该是CandidatesTableViewController实例)实际上是一个UITableViewController实例。
CandidatesTableViewController
接口生成器文件中的未知类_TtC21MyProjectName29CandidatesTableViewController。无法将类型’UITableViewController’(0x1040917f8)的值强制转换为’MyProjectName.CandidatesTableViewController’(0x1013a9890)。
在我的项目中,此控制器嵌入到另一个控制器中,这就是我强制转换的原因:
tableViewController = (segue.destinationViewController as! CandidatesTableViewController)
有谁知道如何解决这个问题?
不幸的是,通用Swift类对于Objective-C代码不可见,并且在Interface Builder中(在情节提要和Xibs中)也不受支持。我发现这两点密切相关。
作为一种解决方案,我建议您使用聚合:不要使您的视图控制器具有通用性,而是将某些逻辑提取到另一个(泛型)类中并在视图控制器内部使用它。