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



我做了这样的事情:

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] {
...
}

否,枚举不能有多个原始值。但是,你可以使用像这样的竞争财产

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)

如前所述,每个枚举事例不能有多个rawValue,也不能有一个值数组作为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计算属性,如果排序不重要,我强烈建议您使用Set

最新更新