2015-06-30 6 views
0

У меня возникли проблемы с подклассом Swift NSManagedObject, соответствующим протоколу Objective-C.Swift class "не реализует (objc) протокол"

Я создал протокол модели для того, чтобы абстрагироваться несколько мои модели ядра данных из других компонентов в моем приложении, которые не имеют никакого бизнеса, зная эти вещи являются основными данными управляемыми объектов ...

Так у меня есть протокол следующим образом:

@protocol UserProtocol <NSObject> 

@property (nonatomic) NSSet *friends; 

@end 

И мой управляемый объект подкласс Свифт:

class User: NSManagedObject, UserProtocol { 

    @NSManaged var friends: Set<User> 

} 

К сожалению, мне говорят User не соответствует UserProtocol. Я не могу найти способ увидеть быструю интерпретацию моего протокола Objective-C, есть ли способ сделать это? Если я вижу, что я мог бы понять, почему мой быстрый класс не соответствует протоколу.

enter image description here

+0

Возможно, вам нужны геттеры и сеттеры? Кроме того, 'var Set' не эквивалентен' NSMutableSet'? – Mundi

+0

'@ NSManaged' требует' var'. У вас есть точка, хотя, может быть, Set разрешает NSMutableSet. Итак, не существует способа получить представление Swift на фрагменте кода Objective-C? – Daniel

+1

Какая версия Xcode вы используете? В Swift 1.2 (Xcode 6.3.2) 'NSSet' сопоставляется с' Set ', поэтому вам нужно определить свойство как' @NSManaged var friends: Установить 'для удовлетворения протокола. –

ответ

1

В Swift 1.2 (Xcode 6.3.2) NSSet отображается Set<NSObject>, так что вы должны определить свойство, как

@NSManaged var friends: Set<NSObject> 

удовлетворить протокол. В Swift 2 вы можете определить метод протокола Objective-C , используя «легкие генерики».

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