获取 CodingKeys 键值
Posted
技术标签:
【中文标题】获取 CodingKeys 键值【英文标题】:Get the CodingKeys key value 【发布时间】:2020-07-31 19:17:21 【问题描述】:在 Swift 中,使用 Codable 结构和 CodingKeys emum, 如果我有一个 Coordinate 对象,我怎样才能得到纬度和经度 CodingKeys 值,作为一个数组 ["1","2"]
struct Coordinate: Codable
var latitude: Bool?
var longitude: Bool?
var elevation: Bool?
enum CodingKeys: String, CodingKey
case latitude = "1"
case longitude = "2"
case elevation = "3"
以及如何获取所有 CodingKeys 值,仅针对为 true 的变量? 例如,如果经度和海拔设置为 true,我将得到数组 ["2,"3"]
【问题讨论】:
我不清楚这里的问题是什么。鉴于您的字面问题,答案是var values: [String] if longitude == true && elevation == true return ["2", "3"] else return []
,但我怀疑这不是您的意思。你在哪里解决你需要Bool?
的问题。这是什么类型,只对三个轴说“是/否/未确定”?
为什么你的属性是 Bool 类型的,不应该都是 Double 吗?
所以在你的代码中你有 return ["2", "3"] 这不是我想要的。我想从枚举中获取值
你需要澄清你的意思,因为在你的问题中你说你想要一个字符串数组。此外,当您应该只问一个(明确)问题时,您似乎在问 2 个(不清楚)问题。
【参考方案1】:
CaseIterable
会有所帮助
struct Coordinate: Codable
var latitude: Bool?
var longitude: Bool?
var elevation: Bool?
enum CodingKeys: String, CodingKey, CaseIterable
case latitude = "1"
case longitude = "2"
case elevation = "3"
var allKeys: [String]
CodingKeys.allCases.map $0.stringValue
【讨论】:
【参考方案2】:如果我理解正确,这样的事情可能会起作用:
let myCoordinates = Coordinate(latitude: true, longitude: false, elevation: true)
var myArray: [String] = []
if myCoordinates.latitude ?? false
myArray.append("1")
if myCoordinates.longitude ?? false
myArray.append("2")
if myCoordinates.elevation ?? false
myArray.append("3")
另外,谢谢!我不知道 Codable 存在,现在我想我可能会在我的项目中使用它!
【讨论】:
抱歉,Codable
不是用来解码或编码数据的方式
是的,我假设这是在数据被解码为这种格式之后。如果您想对其进行编码,则不会这样做。以上是关于获取 CodingKeys 键值的主要内容,如果未能解决你的问题,请参考以下文章
解码 JSON 时出错 - keyNotFound(CodingKeys
`convertFromSnakeCase` 策略不适用于 Swift 中的自定义 `CodingKeys`
当超类也是 Codable 时,如何在子类中使用 CodingKeys?
JSON解码时出错:Swift.DecodingError.keyNotFound(CodingKeys(stringValue:“cast”,intValue:nil)
Swift Parse JSON 错误:没有与键 CodingKeys 关联的值(stringValue: \"_source\