枚举大小写的原始值必须是字符串的文字错误

问题描述 投票:0回答:1

我想使用相同的结构从不同的 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)"
似乎不是字面意思。我的解决方案是什么?

ios swift struct enums
1个回答
3
投票

你可以用不同的方式来做,用参数创建枚举

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

© www.soinside.com 2019 - 2024. All rights reserved.