2015-12-01 7 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 должен быть «сериализованы» аналогичным образом - может быть, это может быть даже представлена ​​сущность Core Data - но это зависит от структуры (URE) из структура.

Смежные вопросы