Ios Swift中的自定义类归档
我想在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
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) {
}
}