我做了这样的事情:
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