2015-06-15 5 views
0

У меня NSManagedObject подкласс Shop, для которого я определил следующую функцию в стрижа:Swift - Использование типа «Я» в базовом классе?

// insertions 
public class func insertOrUpdateRepresentation(representation: Dictionary<String, AnyObject>, context: NSManagedObjectContext) -> Shop { 

    let identifier = representation["id"] as! NSNumber 
    let string = identifier.stringValue 
    var shop = Shop.fetchObjectWithIdentifier(string, context: context) as! Shop? 

    // insert if needed 
    if (shop == nil) { 
     shop = NSEntityDescription.insertNewObjectForEntityForName(Shop.entityName(), inManagedObjectContext: context) as? Shop 
    } 

    // update 
    shop?.deserializeRepresentation(representation) 
    return shop! 
} 

Теперь, я хотел бы, чтобы определить базовый класс для этого объекта (и другие), где я могу использовать тип класса в этом методе. Теперь в Objective C я могу ссылаться на «я» здесь, чтобы получить текущий класс вызывающего.

Как реализовать такую ​​функциональность в swift?

Спасибо!

+0

Может быть, вы можете использовать технику из http://stackoverflow.com/a/27112385/1187415. –

ответ

0

Получил эту работу, используя быстрые типы, как так:

public class func insertOrUpdateRepresentation<T: DDManagedObject>(representation: Dictionary<String, AnyObject>, context: NSManagedObjectContext, type: T.Type) -> T { 

    let identifier = representation["id"] as! NSNumber 
    let string = identifier.stringValue 
    var obj = T.fetchObjectWithIdentifier(string, context: context) as! T? 

    // insert if needed 
    if (obj == nil) { 
     obj = NSEntityDescription.insertNewObjectForEntityForName(T.entityName(), inManagedObjectContext: context) as? T 
    } 

    // update 
    obj?.deserializeRepresentation(representation) 
    return obj! 
} 
+0

Действительно? Это выглядит крах ко мне. Конечно, я мог ошибаться ... – matt

+0

ya, похоже, работает ... хотя я очень новичок в быстроте, поэтому я могу ошибаться. Что выглядит подозрительно для вас? –

+0

Каждый раз, когда вы принудительно разворачиваете или выполняете кастинг ('as!' Или 'obj!'), Вы потенциально можете задать проблему позже ... – matt

Смежные вопросы