是否可以在枚举中分配多个值? 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
我做了这样的事情:
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