【问题标题】:Custom class archiving in SwiftSwift 中的自定义类归档
【发布时间】:2015-02-03 09:44:57
【问题描述】:

我想在 swift 中归档和取消归档自定义对象,如下所示:

class Line : NSObject, NSCoding  {

    var start : CGPoint


    init(start _start: CGPoint) {
        start = _start
    }

    required init(coder aDecoder: NSCoder) {
        // 1 - compile time error
        self.start = aDecoder.decodeObjectForKey("start") as CGPoint
    }

    override init() {
    }

    func encodeWithCoder(aCoder: NSCoder) {
        // 2 - compile time error
        aCoder.encodeObject(start, forKey: "start")
    }
}

1.编译时错误是: 类型 'CGPoint' 不符合协议 'AnyObject'

2.编译时错误是: 调用中的额外参数“forKey”

如何归档和取消归档一个 CGPoint,我知道 CGPoint 很受打击,这就是问题所在,但是如何解决呢?

提前致谢。

【问题讨论】:

    标签: ios swift nskeyedarchiver nskeyedunarchiver


    【解决方案1】:

    您可以使用以下方法归档/取消归档 CGPoint:

    encodeCGPoint:forKey:
    

    decodeCGPointForKey:
    

    更多信息在这里:https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSCoder_Class/index.html#//apple_ref/occ/instm/NSCoder/encodeCGPoint:forKey:

    【讨论】:

      【解决方案2】:

      也许您可以将 CGPoint 转换为 NSValue。

      func encodeWithCoder(aCoder: NSCoder) {
          var cgPointAsObject:NSValue = NSValue(CGPoint: start)
          aCoder.encodeObject(cgPointAsObject, forKey: "start")
      }
      

      解码时类似的反向过程将 NSValue 转换为 CGpoint。

      【讨论】:

        【解决方案3】:

        swift3 中有一些func 更改,这样做:

        class UserModel: NSObject,NSCoding {
        
        var username:String = ""
        var password: Int = 0
        
        required init(coder aDecoder: NSCoder) {
            super.init()
        
        }
        
        override init() {
        
        }
        
        func encode(with aCoder: NSCoder) {
        
            }
        
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-12-12
          • 2015-09-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-06-02
          • 1970-01-01
          相关资源
          最近更新 更多