在Core Data中存储Swift值类型

时间:2015-12-01 16:57:15

标签: swift cocoa core-data swift2

有没有办法store Swift的value类型,例如核心数据中的enumsstructs

最好的方法是什么?

2 个答案:

答案 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)。