objective-c – 无法在Swift中使用NSCoder解码Int
发布时间:2020-12-14 19:54:51 所属栏目:百科 来源:网络整理
导读:我正在使用 Xcode8 Beta和 Swift 3.0.我试图在NSObject上编码一个简单的对象,但我无法解码Int或NSInteger类型. (编码过程没问题) 代码 class Model : NSObject,NSCoding { var seq: NSNumber? var seq2: Int? // problem with seq2,NSInteger is not ok,eith
我正在使用
Xcode8 Beta和
Swift 3.0.我试图在NSObject上编码一个简单的对象,但我无法解码Int或NSInteger类型. (编码过程没问题)
代码 class Model : NSObject,NSCoding { var seq: NSNumber? var seq2: Int? // problem with seq2,NSInteger is not ok,either var id: String? var value: String? override init() { super.init() } required init?(coder aDecoder: NSCoder){ self.seq = aDecoder.decodeObject(forKey: "seq") as? NSNumber self.seq2 = aDecoder.decodeInteger(forKey: "seq2") self.id = aDecoder.decodeObject(forKey: "id") as? String self.value = aDecoder.decodeObject(forKey: "value") as? String } func encode(with aCoder: NSCoder){ aCoder.encode(seq,forKey: "seq") aCoder.encode(seq2,forKey: "seq2") aCoder.encode(id,forKey: "id") aCoder.encode(value,forKey: "value") } } 解决方法
问题是seq2不是Int,而是Int?可选的.它不能表示为Objective-C整数.
您可以使用decodeObject: required init?(coder aDecoder: NSCoder){ self.seq = aDecoder.decodeObject(forKey: "seq") as? NSNumber self.seq2 = aDecoder.decodeObject(forKey: "seq2") as? Int self.id = aDecoder.decodeObject(forKey: "id") as? String self.value = aDecoder.decodeObject(forKey: "value") as? String super.init() } 或更改它,使其不是可选的: class Model : NSObject,NSCoding { var seq: NSNumber? var seq2: Int var id: String? var value: String? init(seq: NSNumber,seq2: Int,id: String,value: String) { self.seq = seq self.seq2 = seq2 self.id = id self.value = value super.init() } required init?(coder aDecoder: NSCoder) { self.seq = aDecoder.decodeObject(forKey: "seq") as? NSNumber self.seq2 = aDecoder.decodeInteger(forKey: "seq2") self.id = aDecoder.decodeObject(forKey: "id") as? String self.value = aDecoder.decodeObject(forKey: "value") as? String super.init() } func encode(with aCoder: NSCoder) { aCoder.encode(seq,forKey: "value") } override var description: String { return "<Model; seq=(seq); seq2=(seq2); id=(id); value=(value)>" } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |