2015-12-01 49 views

回答

4

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

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)的结构。