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

v09wglhw  于 2022-11-06  发布在  Swift
关注(0)|答案(2)|浏览(133)

我有一个泛型类:

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)

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

zf9nrax1

zf9nrax11#

不幸的是,通用的Swift类对于Objective-C代码是不可见的,并且在Interface Builder中也不受支持(在故事板和xib中)。
作为一个解决方案,我建议您使用聚合:不要让你的视图控制器成为泛型,而是将一些逻辑提取到另一个(泛型)类中,并在你的视图控制器中使用它。

i2loujxw

i2loujxw2#

如果您通过load()方法手动将您的通用VC加载到Objective-C运行时中,也就是说,在您的应用代理的init方法中调用. PaginatedTableViewController.load(),这是可能的。

相关问题