在Swift中传递所有枚举值

nfs0ujit  于 2023-08-02  发布在  Swift
关注(0)|答案(3)|浏览(141)

我必须传递一个枚举数组作为函数参数,大多数时候我必须传递枚举的每一个示例。有没有一种简便的方法来包含所有内容,而不是每次都传递[.NFL, .NBA, .NHL, .MLB, .NCAAM, .NCAAF]?我可以创建和所有属性,这样我就可以传递包含所有情况的.all了吗?

enum LSLeague: String {
    case NFL = "NFL"
    case NBA = "NBA"
    case NHL = "NHL"
    case MLB = "MLB"
    case NCAAM = "NCAAM"
    case NCAAF = "NCAAF"
}

字符串

oipij1gg

oipij1gg1#

你可以在枚举类型上使用.allCases。
因此,您可能仍然需要根据您的用例做一些工作,但如果您使用以下命令,则可以迭代枚举中的每个元素:

for league in LSLeague.allCases {
       //code here
    }

字符串
编辑:@aheze有一个很好的观点,我只是想添加到这个答案中。他说,“确保枚举也符合CaseIterable”
所以,还要确保你必须更改枚举:

enum LSLeague: String: CaseIterable {
        case NFL = "NFL"
        case NBA = "NBA"
        case NHL = "NHL"
        case MLB = "MLB"
        case NCAAM = "NCAAM"
        case NCAAF = "NCAAF"
    }


如果你能使用这种技术。

t9eec4r0

t9eec4r02#

  • Swift 5酒店**
    对枚举使用CaseIterable协议:
enum CustomTypes: String, CaseIterable {
    case location = "Location"
    case organization = "Organization"
    case dutyUse = "Duty Use"
}

字符串

用法:

let values: [String] = CustomTypes.allCases.map { $0.rawValue }


// values = [“Location”,“Organization”,“Duty Use”]

xzabzqsa

xzabzqsa3#

  • Swift 5酒店**

根据Prashant Gaikwad的回答,我们需要对enum使用CaseIterable协议:

enum PlateType: String, CaseIterable {
    case classic
    case private

var engTitle: String {
    switch self {
    case .classic:
        return "Classic"
    case .privat:
        return "Private"
    }
}

//make title
var arbTitle: String {
    switch self {
    case .classic:
        return "كلاسيكية"
    case .privat:
        return "سيارة خاصة"
}
}

字符串
现在,根据我们的使用,我们将像这样搜索两种语言。这里type包含我们的值,它将是classic或private,现在我们将像这样使用下面的代码

let selectedValue = PlateType.allCases.first(where: { $0.engTitle == type || $0.arbTitle == type })


现在打印值,您将完美地获得值。

相关问题