क्या कोर डेटा में store स्विफ्ट के value प्रकार हैं, जैसे enums या structs?

ऐसा करने का सबसे अच्छा तरीका क्या है?

2
cfischer 1 पद 2015, 19:57

2 जवाब

सबसे बढ़िया उत्तर

यह वास्तव में बहुत आसान है: बस अपने मूल्य प्रकार के बाइट्स के साथ 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)
6
Kametrixom 1 पद 2015, 17:52

enum के लिए एक उपयुक्त तरीका एनम को कोर डेटा द्वारा समर्थित कच्चे प्रकार के साथ घोषित करना है और एनम मामले को कच्चे मूल्य और इसके विपरीत में परिवर्तित करने के लिए एक कस्टम इंस्टेंस गुण का उपयोग करना है।

उदाहरण के लिए:

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) पर निर्भर करता है।

1
vadian 1 पद 2015, 17:21