[英]Swift get all items in enum
我在枚举中有属性,我需要这些常量的数组以将它们与 String 键匹配。 我需要自动遍历它们。 我无法更改输入,因为它已生成。
public enum Items {
public static let a = Assets(named: "A")
public static let b = Assets(named: "B")
public static let c = Assets(named: "C")
public static let d = Assets(named: "D")
public static let e = Assets(named: "E")
}
我试过镜像它们。
如果您只是使用枚举作为占位符来放入 static 变量,那很容易。 只需创建一个包含所有属性的 static 数组。
struct Assets
{
let name: String
var assets: String { "assets for \(name)" }
init(named: String)
{
self.name = named
}
}
enum Items2 {
static let a = Assets(named: "A")
static let b = Assets(named: "B")
static let c = Assets(named: "C")
static let d = Assets(named: "D")
static let e = Assets(named: "E")
static var allItems: [Assets] { return [a, b, c, d, e] }
}
for item in Items2.allItems
{
print(item.assets)
}
但是,如果您担心您可能会忘记向数组添加新属性,则可以适当地使用枚举。 使用rawValue
为String
且符合CaseIterable
的枚举并定义所有案例。 然后添加一个根据案例的原始值获取Assets
的属性。 然后您可以使用枚举的allCases
属性来获取所有案例。
enum Items: String, CaseIterable
{
case a = "A"
case b = "B"
case c = "C"
case d = "D"
case e = "E"
var assets: Assets { Assets(named: rawValue) }
static var allItems: [Assets] { allCases.map{ $0.assets } }
}
for item in Items.allItems
{
print(item.assets)
}
CaseIterable
枚举具有自动合成的allCases
属性。 如果您添加一个新案例,它会自动出现在allCases
中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.