Есть ли способ для store
Типы Swift's value
, такие как enums
или structs
в Core Data?Сохранение типов значений Swift в данных ядра
Каков наилучший способ сделать это?
Есть ли способ для store
Типы Swift's value
, такие как enums
или structs
в Core Data?Сохранение типов значений Swift в данных ядра
Каков наилучший способ сделать это?
Это на самом деле довольно просто: просто инициализируйте 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 - но это зависит от структуры (URE) из структура.