swift - 组合 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
}
}
解决方案
您希望将功能放入协议中并且它是可能的,因为我们谈论的是计算属性而不是存储属性(不能通过协议添加)。
您首先编写空协议和希望协议实现的扩展,然后将扩展所需的内容添加到协议定义中。
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 {}
推荐阅读
- c# - 对于包含字符和数字的字符串,如何只给所有数字加1
- r - data.table 中的 setnames 确实会正确标记列
- android-studio - Gradle 同步锁
- javascript - 在发送到服务器端之前在客户端散列密码
- java - 在 json 数据中获取换行符转义字符
- android - 无法安全释放相机
- primefaces - 嗨,我有一个带有菜单栏的 JSF 页面。我想在页面顶部显示一条消息,以显示对话框中的操作结果
- json - 将 JSON 数组解析为 Map
使用 Kotlinx.serialization - mongodb-stitch - MongoDB Stitch 自定义新用户电子邮件确认
- uitableview - 使用 UITableView 时发生不需要的 segue