【发布时间】:2015-12-01 16:57:15
【问题描述】:
有没有办法在 Core Data 中使用 store Swift 的 value 类型,例如 enums 或 structs?
最好的方法是什么?
【问题讨论】:
标签: swift cocoa core-data swift2
有没有办法在 Core Data 中使用 store Swift 的 value 类型,例如 enums 或 structs?
最好的方法是什么?
【问题讨论】:
标签: swift cocoa core-data swift2
实际上非常简单:只需使用您的值类型的字节初始化 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)
【讨论】:
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 必须以类似的方式“序列化”——也许它甚至可以由 Core Data 实体表示——但这取决于结构的 struct(ure)。
【讨论】: