Swift4中decode(_:forKey:)成员引用歧义及数据转换需求
解决Swift Codable中把字典类型
data字段转为字符串数组的问题 嘿,我刚好处理过类似的遗留API响应转换需求,给你一个完整的可运行方案:
首先,我们需要自定义Codable的解码逻辑,把服务端返回的字典类型data字段的键提取出来,转换成字符串数组。下面是完整的模型实现:
struct LegacyResponse: Codable { // 最终要使用的字符串数组 let dataKeys: [String] // 映射服务端的字段名 enum CodingKeys: String, CodingKey { case data } init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: CodingKeys.self) // 解码服务端返回的字典类型data字段 // 如果服务端字典的值类型固定(比如都是String),可以把[String: Any]改成[String: String]更安全 let dataDictionary = try container.decode([String: Any].self, forKey: .data) // 提取字典的所有键,转为字符串数组 self.dataKeys = Array(dataDictionary.keys) } }
补充说明:
- 如果需要处理解码失败的情况(比如服务端返回的
data不是字典类型),可以加上你代码里提到的do-catch块来容错:
init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: CodingKeys.self) do { let dataDictionary = try container.decode([String: Any].self, forKey: .data) self.dataKeys = Array(dataDictionary.keys) } catch { // 这里可以根据业务需求处理,比如返回空数组或者抛出自定义错误 self.dataKeys = [] // 若需要抛出错误:throw DecodingError.dataCorruptedError(forKey: .data, in: container, debugDescription: "Data is not a valid dictionary") } }
这样就能完美把遗留格式的字典类型data转换成你需要的字符串数组啦~
内容的提问来源于stack exchange,提问作者aman
相关产品推荐
相关产品推荐

