当我确认可解码协议时,如何快速从解码器解码列表
struct ActiveModuleRespones:Codable {
var Notice:[Notice]?
var Module:[Module]?
public init(from: Decoder) throws {
//decoding here
let container = try from.singleValueContainer()
self.Notice = try? container.decode([Notice].self)
}
}
遇到此错误:
Cannot invoke 'decode' with an argument list of type '([[Notice]?])'
请帮助,
答案 0 :(得分:2)
它与变量本身混淆。更改变量名称以对其进行修复。
struct ActiveModuleRespones: Codable {
var notice: [Notice]?
var module: [Module]?
public init(from: Decoder) throws {
//decoding here
let container = try from.singleValueContainer()
self.notice = try? container.decode([Notice].self)
}
}
在Swift中,所有类型都具有 UpperCamelCase 名称,几乎其他都具有 lowerCamelCase 名称。
最后,使用try?
将杀死所有异常,并且您永远不会知道出了什么问题,请改用此方法:
self.notice = try container.decode([Notice]?.self)
答案 1 :(得分:0)
如果您需要可选值,请将decodeIfPresent
与非可选类型一起使用,不要使用try?
struct ActiveModuleRespones: Decodable {
var notice: [Notice]?
enum CodingKeys: String, CodingKey {
case notice
}
public init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
self.notice = try container.decodeIfPresent([Notice].self, forKey: .notice)
}
}