我试图通过协议将功能添加到NSManagedObject
。我添加了一个可以正常工作的默认实现,但只要我试图用协议扩展我的子类,它就会告诉我它的一部分没有实现,尽管我添加了默认实现。Swift中协议扩展的默认实现不起作用
任何人有我在做什么想法错误?
class Case: NSManagedObject {
}
protocol ObjectByIdFetchable {
typealias T
typealias I
static var idName: String { get }
static func entityName() -> String
static func objectWithId(ids:[I], context: NSManagedObjectContext) -> [T]
}
extension ObjectByIdFetchable where T: NSManagedObject, I: AnyObject {
static func objectWithId(ids:[I], context: NSManagedObjectContext) -> [T] {
let r = NSFetchRequest(entityName: self.entityName())
r.predicate = NSPredicate(format: "%K IN %@", idName, ids)
return context.typedFetchRequest(r)
}
}
extension Case: ObjectByIdFetchable {
typealias T = Case
typealias I = Int
class var idName: String {
return "id"
}
override class func entityName() -> String {
return "Case"
}
}
我得到的错误是Type Case doesn't conform to protocol ObjectByIdFetchable
帮助非常赞赏。
这是对的我得出了同样的结论,我用NSNumber替换Int并且它工作。 Any的问题是,它不符合VArgType,因此我不能将它用作谓词的参数。感谢您的好解释! –
@GeorgKitz乐于帮助! – dfri
@GeorgKitz那么,你能否简单地将你的泛型类型限制在我所在的位置:CVarArgType? –