簡體   English   中英

將枚舉值設置為核心數據對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM