NSManagedObject Не может соответствовать протоколу в Swift

Мне нужен общий интерфейс для NSManagedObject и обычного NSObject. В Objective-c я мог бы использовать протокол для достижения этого. Но в Swift я получаю эту ошибку времени выполнения. Любое решение? Заранее спасибо!

protocol Product { var code: String { get set } var sp: String { get set } }

 class Stock: NSManagedObject, Product { @NSManaged var code: String @NSManaged var sp: String 

}

Ошибка: Неопределенные символы для архитектуры i386: «__TFC11YellowPages5Stockg2spSS», на которые ссылаются: __TFC11YellowPages5Stockm2spSS в Stock.o «__TFC11YellowPages5Stockg4codeSS», на который ссылаются: __TFC11YellowPages5Stockm4codeSS в Stock.o ld: символы (символы) не найдены для архитектуры i386 clang: ошибка: команда компоновщика не выполнена с кодом выхода 1 (используйте -v, чтобы увидеть вызов)

Это сработало для меня. Попробуйте сами и посмотрите, работает ли это:

 class MyEntity: NSManagedObject { @NSManaged var testAttribute: String } @objc protocol MyProtocol { var testAttribute: String { get set } } extension MyEntity: MyProtocol { } class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate let myContext = appDelegate.managedObjectContext! let entity: MyEntity = NSEntityDescription.insertNewObjectForEntityForName("MyEntity", inManagedObjectContext: myContext) as MyEntity foo(entity) println(entity.testAttribute) } func foo(var object: MyProtocol) { object.testAttribute = "bar" } } 

Ниже также работало, но я думаю, что это лучший способ сделать это:

 @objc protocol MyProtocol { var testAttribute: String { get set } } class MyEntity: NSManagedObject, MyProtocol { @NSManaged var testAttribute: String } class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate let myContext = appDelegate.managedObjectContext! let entity: MyEntity = NSEntityDescription.insertNewObjectForEntityForName("MyEntity", inManagedObjectContext: myContext) as MyEntity foo(entity) println(entity.testAttribute) } func foo(var object: MyProtocol) { object.testAttribute = "bar" } } 
  • Сохранение массива изображений с помощью nsuserdefaults
  • Фоновый URL-адрес с идентификатором backgroundSession уже существует
  • Протокол делегирования метода не вызывается в Swift
  • Почему GKVoiceChat не передает какой-либо звук в iOS?
  • Как создать всплывающее меню в iOS?
  • Realm Swift: возможно ли сохранить базу данных после удаления приложений?
  • AFIetworking setImageWithURLRequest устанавливает изображение в неправильной ячейке после прокрутки (iOS, Swift)
  • Поиск всех пользователей по имени пользователя в firebase IOS
  • Swift 2: Как загрузить UITabBarController после отображения LoginViewController
  • Сделайте двойной прыжок игрока Sprite Kit Swift
  • Сохранение текущего GIDGoogleUser вместо входа на каждый запуск
  • Давайте будем гением компьютера.