首页 > 解决方案 > 组合 NSManagedObject 类

问题描述

我有多个NSManagedObject使用临时变量扩展的类,从另一个上下文返回它的实例。下面的方法效果很好,但是对于很多类来说有点乏味。

我尝试扩展NSManagedObject,但我无法返回特定的类类型,因为 NSManagedObject 是非泛型的。

是否可以将所有这些组合到一个扩展变量中,但仍保留返回当前类类型的能力?

extension Account {
    var temp: Account {
        return core.temporaryContext.object(with: self.objectID) as! Account
    }
}


extension Transaction {
    var temp: Transaction {
        return core.temporaryContext.object(with: self.objectID) as! Transaction
    }
}


extension Category {
    var temp: Category {
        return core.temporaryContext.object(with: self.objectID) as! Category
    }
}

标签: swiftswift4

解决方案


您希望将功能放入协议中并且它是可能的,因为我们谈论的是计算属性而不是存储属性(不能通过协议添加)。

您首先编写空协议和希望协议实现的扩展,然后将扩展所需的内容添加到协议定义中。

public protocol FetchRequestProtocol: class {
    var objectID: NSManagedObjectID { get }
}

protocol TemporaryProtocol: FetchRequestProtocol {
    var core: Core { get }
}
extension TemporaryProtocol {
    var temp: Self {
        return core.temporaryContext.object(with: self.objectID) as! Self
    }
}

extension Account: TemporaryProtocol {}
extension Transaction: TemporaryProtocol {}
extension Category: TemporaryProtocol {}

推荐阅读