有没有办法store
Swift的value
类型,例如核心数据中的enums
或structs
?
最好的方法是什么?
答案 0 :(得分:6)
实际上非常简单:只需使用值类型的字节初始化NSData
。
您的价值类型:
struct MyStruct {
let x : Int
let y : Bool
let z : Double
}
设置和获取数据的功能
func valueToData<T>(var t: T) -> NSData {
return NSData(bytes: &t, length: sizeof(T))
}
func dataToValue<T>(inout t: T, data: NSData) {
memcpy(&t, data.bytes, data.length)
}
试验:
let originalValue = MyStruct(x: 3, y: true, z: 1.3)
let data = valueToData(originalValue)
// Save data to CoreData
var s = MyStruct(x: 0, y: false, z: 0) // Empty Value
dataToValue(&s, data: data) // Initialize with data
// s is MyStruct(x: 3, y: true, z: 1.3)
答案 1 :(得分:1)
enum
的一种合适方式是使用Core Data支持的原始类型声明枚举,并使用自定义实例属性将枚举大小写转换为原始值,反之亦然。
例如:
enum State : Int32 {
case None, Empty, Full
}
@NSManaged var state: Int32
var stateEnum: State {
get {
return State(rawValue: state)!
}
set {
state = newValue.rawValue
}
}
struct
必须以类似的方式“序列化” - 也许它甚至可以由核心数据实体表示 - 但这取决于结构的结构(ure)。