2015-03-08 8 views
8

का उपयोग कर स्विफ्ट एन्कोड टुपल NSCoding का उपयोग कर एक टुपल स्टोर करना संभव है? मेरे पास ((UInt8, UInt8), (UInt8, UInt8)) जैसे टुपल हैं। लेकिन aCoder.encodeObject(myTuple) काम नहीं करता है। क्या मुझे tuple को NSData में परिवर्तित करना है या यह बिल्कुल संभव नहीं है? किसी भी मदद के लिए धन्यवादएनएससीओडी

उत्तर

5

ट्यूपल को एन्कोड नहीं किया जा सकता क्योंकि यह कक्षा नहीं है, लेकिन एक दृष्टिकोण अलग-अलग टुपल के प्रत्येक घटक को एन्कोड करना है और फिर डीकोडिंग पर आप प्रत्येक घटक को डीकोड करते हैं और फिर टुपल के मान को टुपल पर सेट करते हैं डीकोडेड सामग्री से बनाया गया।

class ViewController: UIViewController { 
    override func viewDidLoad() { 
     super.viewDidLoad() 

     let obj = SomeClass() 
     obj.foo = (6,5) 

     let data = NSKeyedArchiver.archivedDataWithRootObject(obj) 
     NSUserDefaults.standardUserDefaults().setObject(data, forKey: "books") 

     if let data = NSUserDefaults.standardUserDefaults().objectForKey("books") as? NSData { 
      let o = NSKeyedUnarchiver.unarchiveObjectWithData(data) as SomeClass 
      println(o.foo) // (Optional(6), Optional(5)) 

     } 
    } 
} 

class SomeClass: NSObject, NSCoding { 
    var foo: (x: Int?, y: Int?)! 

    required convenience init(coder decoder: NSCoder) { 
     self.init() 
     let x = decoder.decodeObjectForKey("myTupleX") as Int? 
     let y = decoder.decodeObjectForKey("myTupleY") as Int? 
     foo = (x,y) 
    } 

    func encodeWithCoder(coder: NSCoder) { 
     coder.encodeObject(foo.x, forKey: "myTupleX") 
     coder.encodeObject(foo.y, forKey: "myTupleY") 
    } 
} 
0

मैं बस अपना कोड है जो इयान के कोड के आधार पर कुछ अपडेट किया है साझा करना चाहते हैं। मैंने तत्वों की श्रेणी/उपश्रेणी की सूची बनाने के लिए मेरा उपयोग किया।

class catSubcatOption: NSObject, NSCoding { 

var element: (x: String, y: String)! 

override init() { 

} 

public func encode(with aCoder: NSCoder) { 
    aCoder.encode(element.category, forKey: "category") 
    aCoder.encode(element.subcategory, forKey: "subcategory") 
} 

required init(coder decoder: NSCoder) { 
    let category = decoder.decodeObject(forKey: "category") as! String 
    let subcategory = decoder.decodeObject(forKey:"subcategory") as! String 
    element = (category,subcategory) 
} } 
संबंधित मुद्दे