繁体   English   中英

Swift 获取枚举中的所有项目

[英]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)
}

但是,如果您担心您可能会忘记向数组添加新属性,则可以适当地使用枚举。 使用rawValueString且符合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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM