【问题标题】:Storing Swift value types in Core Data在 Core Data 中存储 Swift 值类型
【发布时间】:2015-12-01 16:57:15
【问题描述】:

有没有办法在 Core Data 中使用 store Swift 的 value 类型,例如 enumsstructs

最好的方法是什么?

【问题讨论】:

    标签: swift cocoa core-data swift2


    【解决方案1】:

    实际上非常简单:只需使用您的值类型的字节初始化 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)
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2020-09-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-19
        • 2011-09-28
        • 1970-01-01
        相关资源
        最近更新 更多