gpt4 book ai didi

ios - 将枚举值设置为核心数据对象

转载 作者:搜寻专家 更新时间:2023-10-31 22:33:09 25 4
gpt4 key购买 nike

我有一个核心数据对象:

@objc enum ProductType:Int32 {
case One
case Two
}

class Product: NSManagedObject {

@NSManaged var productType:ProductType
}

我在这里读到:Swift: Storing states in CoreData with enums

然后我想创建对象:

product = NSEntityDescription.insertNewObjectForEntityForName("Product", inManagedObjectContext: appDelegate.managedObjectContext) as! Product

product.setValue(ProductType.One, forKey: "productType")

但是编译器说:

Cannot convert value of type '' to expected argument type 'AnyObject?'

而且我怀疑这是否是处理枚举的正确解决方案...

最佳答案

如果您想通过setValue(: forKey:)设置属性,该值必须符合AnyObject;因此,您可以将枚举更改为 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

关于ios - 将枚举值设置为核心数据对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35413402/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com