ios – Swift:不符合协议NSCoding

前端之家收集整理的这篇文章主要介绍了ios – Swift:不符合协议NSCoding前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试在 swift中使用NSCoding协议,但是似乎无法弄清楚为什么编译器会抱怨当我实现所需的方法时它“不符合协议NSCoding”: @H_301_2@class ServerInfo: NSObject,NSCoding { var username = "" var password = "" var domain = "" var location = "" var serverFQDN = "" var serverID = "" override init() { } init(coder aDecoder: NSCoder!) { self.username = aDecoder.decodeObjectForKey("username") as NSString self.password = aDecoder.decodeObjectForKey("password") as NSString self.domain = aDecoder.decodeObjectForKey("domain") as NSString self.location = aDecoder.decodeObjectForKey("location") as NSString self.serverFQDN = aDecoder.decodeObjectForKey("serverFQDN") as NSString self.serverID = aDecoder.decodeObjectForKey("serverID") as NSString } func encodeWithCoder(_aCoder: NSCoder!) { _aCoder.encodeObject(self.username,forKey: "username") _aCoder.encodeObject(self.password,forKey: "password") _aCoder.encodeObject(self.domain,forKey: "domain") _aCoder.encodeObject(self.location,forKey: "location") _aCoder.encodeObject(self.serverFQDN,forKey: "serverFQDN") _aCoder.encodeObject(self.serverID,forKey: "serverID") } }

这是一个bug还是我只是想念一些东西?

解决方法

在报告导航器中的详细编译器消息中可以看到,
您的方法未正确声明: @H_301_2@ error: type 'ServerInfo' does not conform to protocol 'NSCoding' class ServerInfo: NSObject,NSCoding { ^ Foundation.NSCoding:2:32: note: protocol requires function 'encodeWithCoder' with type '(NSCoder) -> Void' @objc(encodeWithCoder:) func encodeWithCoder(aCoder: NSCoder) ^ note: candidate has non-matching type '(NSCoder!) -> ()' func encodeWithCoder(_aCoder: NSCoder!) { ^ Foundation.NSCoding:3:25: note: protocol requires initializer 'init(coder:)' with type '(coder: NSCoder)' @objc(initWithCoder:) init(coder aDecoder: NSCoder) ^ note: candidate has non-matching type '(coder: NSCoder!)' init(coder aDecoder: NSCoder!) {

(这可能在beta版本之间发生变化)
此外,initWithCoder方法必须标记为必需:

@H_301_2@required init(coder aDecoder: NSCoder) { } func encodeWithCoder(_aCoder: NSCoder) { }

在Swift 3中,所需的方法

@H_301_2@required init(coder aDecoder: NSCoder) { } func encode(with aCoder: NSCoder) { }

猜你在找的iOS相关文章