我試圖通過協議將功能添加到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? –