【发布时间】:2021-10-15 04:32:02
【问题描述】:
我有几个基本类型 NSManagedObject 的类,每个类都包含一个类函数来返回给定上下文的第一个对象。这是一个例子:
public class Car: NSManagedObject {
class func first(context: NSManagedObjectContext) -> Car? {
let fetchRequest = Car.fetchRequest()
fetchRequest.fetchLimit = 1
let results = try? context.fetch(fetchRequest)
return results?.first
}
}
我不想为每个子类编写此函数,而是将通用版本作为 NSManagedObject 的扩展。我试过这个:
extension NSManagedObject {
class func first(context: NSManagedObjectContext) -> Self? {
let fetchRequest = Self.fetchRequest()
fetchRequest.fetchLimit = 1
let results = try? context.fetch(fetchRequest)
return results?.first
}
}
但这会产生“表达式类型不明确,没有更多上下文”错误。如何做到这一点?
【问题讨论】:
-
使用here描述的协议扩展
-
@vadian:虽然我认为协议扩展的概念很有趣,但它并没有解决我的示例中的问题,您仍然会遇到同样的错误。
-
它可以与
let results = try? context.fetch(fetchRequest) as? [Self]一起使用吗?