Swift 使用枚举协议CaseIterable遍历枚举所有值

在Swift中,可以使用.allCases属性来枚举一个符合CaseIterable协议的枚举的所有情况。使用不同的方法,如for-in循环,reduce,filter和map函数,你可以迭代一个枚举。

什么是CaseIterable协议?

CaseIterable是一个用于迭代枚举案例的协议。它为一个枚举自动合成了所有的案例。请记住,这个协议不能应用于关联值的情况。这个协议使你能够使用一个名为allCases的计算属性来访问案例,该属性在一个集合数组中返回所有的案例。

例子

例如,如果你有一个名为MyEnum的枚举,其原始值为字符串-

enum MyEnum: String, CaseIterable {
   case case1
   case case2
   case case3
}

下面是几个例子,说明你如何使用.allCases属性在Swift中用String原始值来枚举一个枚举 −

我们将使用以下方法在Swift中枚举一个带有字符串类型的枚举:

  • 使用for-in循环
  • 使用map函数来创建一个原始值的数组

使用for-in循环

你可以使用for-in循环来迭代一个枚举的情况。你可以使用枚举提供的allCases属性来迭代这些案例。

例子

enum MyEnum: String, CaseIterable {
   case case1 = "First case"
   case case2 = "Second case"
   case case3 = "Third case"
}
for item in MyEnum.allCases {
   print(item.rawValue)
}

输出

First case
Second case
Third case

在上面的例子中,我们使用CaseIterable协议来迭代枚举的案例。使用for-in循环,以字符串格式迭代allCases。

使用map函数来创建一个原始值的数组

你可以使用map()函数来迭代enum cases。

MyEnum.allCases.map { $0.rawValue }

例子

使用map()函数,你可以转换枚举的rawValue的类型。

enum MyEnum: String, CaseIterable {
   case case1 = "First case"
   case case2 = "Second case"
   case case3 = "Third case"
}
let rawValues = MyEnum.allCases.map { $0.rawValue }
print(rawValues)

输出

["First case", "Second case", "Third case"]

总结

在上面的例子中,使用map()函数来迭代这些案例。同时,我们在map()函数的执行块中为每个案例返回rawValue。

Swift的CaseIterable接口使得列举一个没有相关值的枚举的每个案例变得简单。你可以通过遵守CaseIterable协议和使用allCases属性,将枚举的所有情况作为该枚举类型的集合来访问。

你可以使用枚举提供的allCases属性来迭代一个枚举的所有情况。你可以过滤它们或在所有案例中执行任何其他操作。如果你想转换值的类型,你可以使用map函数来转换它们。在这种情况下,你必须使用rawValue属性。

你应该注意,如果你使用枚举案例的关联值,你就不能迭代案例。对于关联值,CaseIterable协议并不适用。

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值