我正在创建一个符合可编码的类。
我有这个:
import Foundation
class Attribute : Decodable {
var number: Int16
var label: String?
var comments: String?
init(number:Int16, label:String?, comments:String?) {
self.number = number
self.label = label
self.comments = comments
}
// Everything from here on is generated for you by the compiler
required init(from decoder: Decoder) throws {
let keyedContainer = try decoder.container(keyedBy: CodingKeys.self)
number = try keyedContainer.decode(Int16.self, forKey: .number)
label = try keyedContainer.decode(String.self, forKey: .label)
comments = try keyedContainer.decode(String.self, forKey: .comments)
}
enum CodingKeys: String, CodingKey {
case number
case label
case comments
}
}
extension Attribute: Encodable {
public func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(number, forKey: .number)
try container.encode(label, forKey: .label)
try container.encode(comments, forKey: .comments)
}
}
这显然很好。
我创建一个实例Attribute
并使用以下方法对其进行编码:
let newAttribute = Attribute.init(number:value.number, label:value.label, comments:value.shortcut)
然后我创建一个包含这些属性的数组并使用
let array = try JSONEncoder().encode(array)
这将对 to 的数组进行Attribute
编码Data
。
然后我尝试将Data
对象转换回Attribute
使用这个的数组:
let array = try JSONDecoder().decode(Attribute.self, from: data) as! Array<Attribute>
我得到的第一个错误是:
从“属性”转换为不相关类型“数组<属性>”总是失败
如果我移除铸件,我会在解码尝试时发现此错误......
可选(“数据格式不正确。”)
有任何想法吗?