Я пытаюсь создать универсальную функцию в расширении класса, но получаю ошибку компилятора.Быстрая общая функция
У меня тоже классов А и В, как расширение NSManagedObject
Я хочу создать findOne()
функцию в моем расширении класса.
extension NSManagedObject {
public class func findOne() -> NSManagedObject {
// some working stuff returning a NSManagedObject
}
}
Моей проблема: Когда я использую этот метод А, типа возвращаемого значение NSManagedObject
let aObject = A.findOne //type is NSManagedObject
Таким образом, очевидно, что я могу бросить его и получить объект класса А
let aObject = A.findOne as! A//type is NSManagedObject
Начиная с этого момента, я хочу заменить свою реализацию расширения, чтобы использовать общий, что делает меня:
let aObject = A.findOne //type is A
Я попытался это:
extension NSManagedObject {
public class func findOne<T>() -> T {
// some working stuff returning a NSManagedObject
}
}
Но A.findOne()
еще NSManagedObject
типа.
Может ли кто-нибудь мне помочь?
UPDATE Этот код на самом деле работает, если я использую:
class func findOne<T : NSManagedObject>() -> T {
//Do some stuff
return myObject as! T
}
let myObject : A = A.findOne()
вы можете использовать 'Self' в качестве возвращаемого типа. – luk2302
Сравните [Как создать экземпляры подклассов управляемого объекта в расширении NSManagedObject Swift?] (Http://stackoverflow.com/questions/27109268/how-can-i-create-instances-of-managed-object-subclasses- в-nsmanagedobject-SWI). –
@Alessandro: Почему вы добавили «OS X» в заголовок и теги? Основные данные существуют и в iOS, и ничто в этом вопросе не относится к OS X. –