我想使用相同的结构从不同的 API 中获取,因为我需要能够根据我需要获取的内容更改
enum
字符串,如下所示:
static var menuSelection: String = ""
if ... {
menuSelection = "1"
} else if ... {
menuSelection = "2"
} else {
menuSelection = "3"
}
struct Order : Decodable {
private enum CodingKeys : String, CodingKey { case raw = "RAW" }
let raw : MenuRAW
}
struct MenuRAW : Decodable {
private enum CodingKeys : String, CodingKey { case menu = "\(menuSelection)" } // <---- raw value for enum case must be a literal
let menu : MenuReference
}
struct MenuReference : Decodable {
private enum CodingKeys : String, CodingKey {
case usd = "USD"
case eur = "EUR"
case gbp = "GBP"
case cny = "CNY"
case rub = "RUB"
}
let usd : MenuUSD?
let eur : MenuEUR?
let gbp : MenuGBP?
let cny : MenuCNY?
let rub : MenuRUB?
}
但我得到:
枚举情况的原始值必须是文字
as
"\(menuSelection)"
似乎不是字面意思。我的解决方案是什么?
你可以用不同的方式来做,用参数创建枚举
enum CodingKeys {
case menu(menuSelection: String)
var stringValue: String? {
switch self {
case let .menu(menuSelection):
return menuSelection
default:
return nil
}
}
}
现在你可以像这样使用
stringValue
代替 rawValue
CodingKeys.menu(menuSelection: "You parameter").stringValue