是否可以在枚举中分配多个值? Swift 语言

Is it possible to assign multiple values in an enumeration? Swift language

我做了这样的事情:

enum DollarCountries: String { 
    case usa = "USA", //Countries Where the U.S. Dollar
    case australia = "Australia" //Countries Where the Australian Dollar        
    case canada = "Canada" //Countries Where the Canadian Dollar
}

我需要这样做:

enum DollarCountries: String { 
    case usa = "USA", "Palau", "Panama"
    case australia = "Australia", "Kiribati", "Nauru"
    case canada = "Canada"
}

我试过这样做,但没有成功:c

enum DollarCountries: [String] {
...
}

不,枚举不能有多个原始 values.But,你可以像那样使用竞争 属性

enum DollarCountries1{
    case usa(String?)
    var storedDollar : [String]  {
        ["USA","Australia","Canada"]
    }

    var moneyType : String{
        switch self {
        case .usa(let str):
            if storedDollar.contains(str!){
                return "Dollar";
            }
            return "none"
        default:
            return "none"
        }
     }

}

let country = "USA"
var forUsa = DollarCountries1.usa(country)
print(forUsa.moneyType)

如前所述,每个枚举案例不能有多个 rawValues,也不能有一个值数组作为 rawValue

如何进行在很大程度上取决于代码的使用方式。如果您打算从 String 转到您的 enum,您可以使用自定义初始化程序

来促进这一点
enum DollarCountries {
    case usa, australia, canada
}

extension DollarCountries {

    init?(_ rawValue: String) {
        switch rawValue {
            case "USA", "Palau", "Panama":
                self = .usa

            case "Australia", "Kiribati", "Nauru":
                self = .australia

            case "Canada":
                self = .canada

            default:
                return nil
        }
    }
}

let a = DollarCountries("USA")      // .usa
let b = DollarCountries("Kiribati") // .australia
let c = DollarCountries("UK")       // nil

如果您主要想反过来,计算 属性 就足够了:

extension DollarCountries {

    var nations: [String] {
        switch self {
            case .usa:
                return ["USA", "Palau", "Panama"]

            case .australia:
                return ["Australia", "Kiribati", "Nauru"]

            case .canada:
                return ["Canada"]
        }
    }
}

如果您两者都需要,我会留给您寻找一种无需复制数组即可实现的方法

P.S:对于nations computed 属性,如果排序不重要,我强烈建议你使用Set