NSManagedObject Can't conform to protocol in Swift
This worked for me. Try it for yourself and see if it works:
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"
}
}
The below also worked, but I think the above is a better way to do it:
@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"
}
}