假设我有一个公共枚举,每个枚举都有多个关联值。我目前将它们存储起来:
public enum foo {
case A
case B
case C
case ... //goes on for hundreds of enums
}
要访问一个值,我使用switch语句进行线性搜索(在枚举中):
func getNumber() -> Int { //multiple functions just like this for each A, B, C...
switch self {
case .A: return 102 //numbers are arbitrary
case .B: return 438
case .C: return 293
case ... //and so on
}
}
func getName() -> String {
switch self {
case .A: return "Apple" //names are arbitrary as well...
case .B: return "Banana"
case .C: return "Cherry"
case ...
}
}
func ...
但是,要访问列表底部的内容,我必须遍历枚举的每个值,这必须每秒多次执行。我觉得这样效率很低。理想情况下,我希望能够:
存储多个元素,每个元素都有各自的值。每个元素应该有多个与之相关的相似变量(名称,重量,大小等),每个元素的值都不同。
能够访问每个枚举,而无需迭代switch语句。例如,如果用户输入foo.B.number(),理想情况下它将返回“438”而不必遍历每个元素。
不可更改(B的“数字”永远不会被修改,等等)。这些值是最终的。
能够使用String访问某个枚举。例如,如果“Apple”与foo的“A”相关联,那么可以调用这样的函数:
func getFoo(s:String) - > foo { ... }
getFoo(s:“Apple”)//应该返回A
我可以做些什么来存储和访问这些?
答案 0 :(得分:1)
在swift中执行此操作的最有效方法是使用字典和元组(元组将数据组合在一起,字典是存储大量数据并有效查找数据的好方法)
public enum Foo {
case A, B, C, D, E, F //and on
}
let dictionary: [Foo: (number: Int, name: String)] = [
.A: (102,"Apple")
]
//然后调用值
let favoriteFruitOfA = dictionary[.A].name
但是如果你有数百个值,你可能想放弃枚举。枚举非常适合于声明离散值的详尽列表,例如北,南,东,西。此外,枚举声明了一种类型,这就是为什么它的大写,这让我觉得你正在尝试使用枚举来声明一个属性而不应该使用它。欢呼声。