[英]Set enum value to core data object
我有一個核心數據對象:
@objc enum ProductType:Int32 {
case One
case Two
}
class Product: NSManagedObject {
@NSManaged var productType:ProductType
}
我在這里讀到了這個: Swift:使用枚舉在CoreData中存儲狀態
然后我想創建對象:
product = NSEntityDescription.insertNewObjectForEntityForName("Product", inManagedObjectContext: appDelegate.managedObjectContext) as! Product
product.setValue(ProductType.One, forKey: "productType")
但編譯說:
無法將類型''的值轉換為預期的參數類型'AnyObject?'
我懷疑這是使用枚舉工作的正確解決方案......
如果您想通過setValue(: forKey:)
設置屬性,則該值必須符合AnyObject; 因此,您可以將enum更改為NSNumber
,例如。 NSNumber(int: ProductType.Two.rawValue)
如果您想直接通過enum ProductType
設置屬性,則實現自定義setter和getter可以具有該功能。 請參考以下Product
類作為參考:
class Product: NSManagedObject {
@NSManaged var productType: NSNumber?
// For Option 3 by adding a ProductType property
var type: ProductType {
get {
return ProductType(rawValue: self.productType!.intValue)!
}
set {
self.productType = NSNumber(int:newValue.rawValue)
}
}
}
let product = NSEntityDescription.insertNewObjectForEntityForName("Product", inManagedObjectContext: self.managedObjectContext) as! Product
// Option 1: Set productType via setValue(:forKey:)
product.setValue(NSNumber(int: ProductType.Two.rawValue), forKey: "productType")
// Option 2: Set productType directly
product.productType = NSNumber(int: ProductType.Two.rawValue)
// Option 3: set productType via an extra ProductType property
product.type = ProductType.Two
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.