I am trying to use the NSCoding protocol on a class I have written in swift, but cannot seem to figure out why the compiler complains that it \"does not conform to protocol
As you can see in the detailed compiler messages in the Report navigator, your methods are not declared correctly:
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!) {
(This may have changed between the beta releases.)
In addition, the initWithCoder
method has to be marked as required
:
required init(coder aDecoder: NSCoder) { }
func encodeWithCoder(_aCoder: NSCoder) { }
In Swift 3 the required methods are
required init(coder aDecoder: NSCoder) { }
func encode(with aCoder: NSCoder) { }