Swift 组合NSManagedObject类

Swift 组合NSManagedObject类,swift,swift4,Swift,Swift4,我有多个NSManagedObject类,我用一个临时变量扩展这些类,从另一个上下文返回其实例。下面的方法工作得很好,但是对于很多类来说有点乏味 我试图扩展NSManagedObject,但无法返回特定的类类型,因为NSManagedObject是非泛型的 是否可以将所有这些组合到一个扩展变量中,但仍能像当前一样返回类类型 extension Account { var temp: Account { return core.temporaryContext.object

我有多个
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
    }
}

您希望将功能放入一个协议中,这是可能的,因为我们讨论的是一个计算属性,而不是一个存储属性(不能通过协议添加)

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

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 {}