Ios Swift中的自定义类归档

Ios Swift中的自定义类归档,ios,swift,nskeyedarchiver,nskeyedunarchiver,Ios,Swift,Nskeyedarchiver,Nskeyedunarchiver,我想在swift中归档和取消归档自定义对象,如下所示: class Line : NSObject, NSCoding { var start : CGPoint init(start _start: CGPoint) { start = _start } required init(coder aDecoder: NSCoder) { // 1 - compile time error self.star

我想在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")
    }
}
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) {

    }

}
1。编译时错误为: 类型“CGPoint”不符合协议“AnyObject”

二,。编译时错误为: 调用中的额外参数“forKey”

如何归档和取消归档CGPoint,我知道CGPoint是一个问题,但如何解决它呢


提前感谢。

您可以使用以下方式存档/取消存档CGPoint:

encodeCGPoint:forKey:


此处的详细信息:

您可以使用以下方式存档/取消存档CGPoint:

encodeCGPoint:forKey:


此处的更多信息:

您可以将CGPoint转换为NSValue

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

同样,在解码时,反向过程将NSValue转换为CGpoint。

可能是您可以将CGpoint转换为NSValue

func encodeWithCoder(aCoder: NSCoder) {
    var cgPointAsObject:NSValue = NSValue(CGPoint: start)
    aCoder.encodeObject(cgPointAsObject, forKey: "start")
}
类似地,在解码时将NSValue转换为CGpoint的反向过程。

在swift3中,有一些函数发生了更改,如下所示:

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

    }

}
在swift3中有一些func更改,如下所示:

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

    }

}