У меня есть статическая функция, которая расширяет NSManagedObject
, чтобы получить такой объект...
NSManagedObject.get(type: MYUser.self, with: ("id", "SomeUserId"), in: context)
extension NSManagedObject {
static func get<M: NSManagedObject>(type: M.Type, with kvp: (String, CVarArg), in context: NSManagedObjectContext) -> M? {
guard let name = entity().name else { return nil }
guard M.entity().propertiesByName[kvp.0] != nil else { Assert("\(name) does not have \(kvp.0)"); return nil }
let fetchRequest = NSFetchRequest<M>(entityName: name)
fetchRequest.predicate = NSPredicate(format: "\(kvp.0) == %@", kvp.1)
do {
let object = try context.fetch(fetchRequest)
if let foundObject = object.first { return foundObject }
return nil
} catch {
return nil
}
}
}
Синтаксис, который я хотел бы,
MYUser.get(with: ("id", "SomeUserId"), in: context)
и вывести тип из класса, который сделал вызов... но я не уверен, что здесь поставить вместо общего
NSFetchRequest<M>(entityName: name)
NSFetchRequest<???>(entityName: name)
заранее спасибо
M
в качестве универсального типа не работает для вас? - person Sweeper   schedule 27.09.2018let user: MYUser? = MYUser.get(...)
? - person Sweeper   schedule 27.09.2018