ios - Swift: Does not conform to protocol NSCoding -
i trying use nscoding protocol on class have written in swift, cannot seem figure out why compiler complains "does not conform protocol nscoding" when implement required methods:
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") nsstring self.password = adecoder.decodeobjectforkey("password") nsstring self.domain = adecoder.decodeobjectforkey("domain") nsstring self.location = adecoder.decodeobjectforkey("location") nsstring self.serverfqdn = adecoder.decodeobjectforkey("serverfqdn") nsstring self.serverid = adecoder.decodeobjectforkey("serverid") 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") } } is bug or missing something?
as can see in detailed compiler messages in report navigator, methods not declared correctly:
error: type 'serverinfo' not conform protocol 'nscoding' class serverinfo: nsobject, nscoding { ^ foundation.nscoding:2:32: note: protocol requires function 'encodewithcoder' 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:)' 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 beta releases.) in addition, initwithcoder method has marked required:
required init(coder adecoder: nscoder) { } func encodewithcoder(_acoder: nscoder) { } in swift 3 required methods are
required init(coder adecoder: nscoder) { } func encode(with acoder: nscoder) { }
Comments
Post a Comment