class GeofencingPackage: NSObject, NSCoding {
let latitude : CLLocationDegrees
let longitude : CLLocationDegrees
let packageNumber : String
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeDouble(latitude, forKey: Keys.latitude)
aCoder.encodeDouble(longitude, forKey: Keys.longitude)
aCoder.encodeObject(packageNumber, forKey: Keys.packageNumber)
}
required init(coder aDecoder: NSCoder) {
super.init()
latitude = aDecoder.decodeDoubleForKey(Keys.latitude)
longitude = aDecoder.decodeDoubleForKey(Keys.longitude)
packageNumber = aDecoder.decodeObjectForKey(Keys.packageNumber) as String
}
convenience init(attributes: Dictionary<String,AnyObject>) {
self.init()
latitude = attributes[Keys.latitude] as? Double
longitude = attributes[Keys.longitude] as? Double
packageNumber = attributes[Keys.packageNumber] as? String
}
在convenience init
方法中,我在Missing argument for parameter 'Coder' in call
上收到错误self.init()
我想要做的是让类遵循nscoding,但是当我从后端解析它时,我也想让它用json属性初始化。有没有办法做到这一点?
答案 0 :(得分:1)
GeofencingPackage
类定义指定的(=非便利)启动器
required init(coder aDecoder: NSCoder) { ... }
因此不继承其所有超类指定的初始值设定项。特别是,它不会继承init()
来自NSObject
的方法,所以你
必须添加它:
override init() {
// initialize all properties
super.init()
}
或者,定义指定的初始化程序而不是方便 初始化:
init(attributes: Dictionary<String,AnyObject>) {
latitude = ...
longitude = ...
packageNumber = ...
super.init()
}