복붙노트

[SWIFT] NSCoding를 사용하여 신속한 인 코드 튜플

SWIFT

NSCoding를 사용하여 신속한 인 코드 튜플

해결법


  1. 1.이 클래스 아니지만, 하나 개의 시도는 디코딩 된 콘텐츠로 구성 조의 튜플의 값을 설정 한 후 각 구성 요소를 디코딩하고 디코딩시에 별도로하고 튜플의 각 구성 요소를 인코딩하기 때문에 튜플 부호화 할 수 없다.

    이 클래스 아니지만, 하나 개의 시도는 디코딩 된 콘텐츠로 구성 조의 튜플의 값을 설정 한 후 각 구성 요소를 디코딩하고 디코딩시에 별도로하고 튜플의 각 구성 요소를 인코딩하기 때문에 튜플 부호화 할 수 없다.

    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")
        }
    }
    

  2. 2.난 그냥 이안의 코드를 기반으로 몇 가지 업데이트가 내 코드를 공유하고자합니다. 나는 요소의 카테고리 / 하위 범주의 목록을 작성하는 광산을 사용했다.

    난 그냥 이안의 코드를 기반으로 몇 가지 업데이트가 내 코드를 공유하고자합니다. 나는 요소의 카테고리 / 하위 범주의 목록을 작성하는 광산을 사용했다.

    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)
    } }
    
  3. from https://stackoverflow.com/questions/28929897/swift-encode-tuple-using-nscoding by cc-by-sa and MIT license