【问题标题】:Cannot assign a value of type 'AnyDataSource<NSManagedObjectSubclass>' to a value of type 'AnyDataSource<NSManagedObject>'无法将“AnyDataSource<NSManagedObjectSubclass>”类型的值分配给“AnyDataSource<NSManagedObject>”类型的值
【发布时间】:2017-01-13 17:05:18
【问题描述】:

我被难住了。

这个问题的标题编译错误。

我正在创建一个基本上与NSFetchedResultsControllerUITableViewDataSource 的代表结婚的对象。 type 参数用于指示在获取请求中应该使用哪个NSManagedObject 子类。

这是一个 Swift 缺乏活力的例子,我们最终会编写各种疯狂的代码,(或者,我是 Swift 新手,不喜欢被告知我不能做什么)

所以,在UITableViewController 子类上,我想要一个属性

var dataSource: AnyDataSource<NSManagedObject>?

当我尝试使用 NSManagedObject 的子类创建其中一个并将其分配给该属性时,编译器会抱怨。似乎没有什么可以在没有警告的情况下成功。

你会认为我应该能够使用NSManagedObject 或其任何子类,所以我有点困惑。

有什么想法吗?我正在使用可以在 Internet 上找到的典型“类型擦除”模式,例如通过 realm.io

【问题讨论】:

标签: ios swift generics core-data type-erasure


【解决方案1】:

最终我发现这种方法是不可能的。我的意思是,通过完全基于协议的编程来实现这些。

我定义了一些没有关联类型的基本协议,实现了一个实现该协议的抽象基类,然后在子类中引入了泛型类型参数,以实现具有关联类型的更多协议。

完成后我会在 github 上发布我的通用解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-22
    • 2017-07-02
    • 2015-11-08
    • 2015-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多