【发布时间】:2020-04-02 16:15:40
【问题描述】:
我正在尝试按照 ISO 8601 格式解析 Api 提供的下一个示例 DateInterval 值:
[
{"ISO8601":"PT10M","text":"time: 00:10"},
{"ISO8601":"PT1H10M","text":"time: 01:10"},
{"ISO8601":"PT3H20M","text":"time: 03:20"}
]
到下一个模型:
struct DTOTest:Codable {
var ISO8601:DateInterval
var text:String
}
但我得到下一个不匹配异常:
类型“字典”不匹配上下文:应解码 字典,但找到了一个字符串/数据。编码路径: [_JSONKey(stringValue: "索引 0", intValue: 0), CodingKeys(stringValue: "ISO8601", intValue: nil)]
小米解码功能使用8601策略,所以应该可以正常读取,确实可以使用ISO 8601 Date:
static func decode<T:Decodable>(data:Data, completion: @escaping (Result<T,NetworkError>) -> Void) {
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .iso8601
do {
let retval = try decoder.decode(T.self, from: data)
completion(.success(retval))
} catch let DecodingError.typeMismatch(type, context) {
var reason = "Type '\(type)' mismatch"
reason += "\nContext: \(context.debugDescription)"
reason += "\nCodingPath: \(context.codingPath)"
completion(.failure(.requestError(reason: reason)))
} catch {
let reason = "Error '\(error.localizedDescription)'"
completion(.failure(.requestError(reason: reason)))
}
}
这里可能缺少什么?
【问题讨论】:
标签: swift iso8601 jsondecoder dateinterval