我有一个泛型类:
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)
有人知道如何解决这个问题吗?
2条答案
按热度按时间zf9nrax11#
不幸的是,通用的Swift类对于Objective-C代码是不可见的,并且在Interface Builder中也不受支持(在故事板和xib中)。
作为一个解决方案,我建议您使用聚合:不要让你的视图控制器成为泛型,而是将一些逻辑提取到另一个(泛型)类中,并在你的视图控制器中使用它。
i2loujxw2#
如果您通过
load()
方法手动将您的通用VC加载到Objective-C运行时中,也就是说,在您的应用代理的init方法中调用.PaginatedTableViewController.load()
,这是可能的。