准备好游乐场,简单地将它粘贴到你的 *** 场上
import Foundationstruct Country : Decodable { enum CodingKeys : String,CodingKey { case names } var names : [String]?}extension Country { public init(from decoder: Decoder) throws { let values = try decoder.container(keyedBy: CodingKeys.self) names = try values.decode([String]?.self,forKey: .names)! }}let Json = """ [{ "names": [ "Andorre","Andorra","アンドラ" ] },{ "names": [ "United arab Emirates","Vereinigte arabische Emirate","Émirats arabes Unis","Emiratos Árabes UnIDos","アラブ首長国連邦","Verenigde arabische Emiraten" ] }]""".data(using: .utf8)!let decoder = JsONDecoder()do { let countrIEs = try decoder.decode([Country].self,from: Json) countrIEs.forEach { print(解决方法 您已将名称定义为Country的可选属性.extension Country { public init(from decoder: Decoder) throws { let values = try decoder.container(keyedBy: CodingKeys.self) names = try values.decodeIfPresent([String].self,forKey: .names) }}) }} catch { print("error")}
如果您的意图是该密钥可能不存在于JsON中
然后使用decodeIfPresent:
} catch { print(error.localizedDescription)}
如果容器没有与key关联的值,或者值为null,则此方法返回nil.
但实际上你可以省略你的自定义init(来自解码器:解码器)
实现(和枚举CodingKeys),因为这是默认行为而且会
自动合成.
备注:在任何catch子句中定义了隐式变量错误,
所以
可以提供更多信息,而不仅仅是一个打印(“错误”)(虽然不是在这个特殊的情况下).
总结以上是内存溢出为你收集整理的swift – Codable / Decodable应该使用字符串解码数组全部内容,希望文章能够帮你解决swift – Codable / Decodable应该使用字符串解码数组所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)