站点图标 神之眼的博客

Swift中CaseIterable协议的作用和用法

當前文章的短網址連結為: https://unos.top/3fyg

在 Swift 中,CaseIterable 是一个协议,允许枚举类型自动生成一个包含所有枚举值的集合。通过遵循这个协议,您可以轻松地访问和迭代枚举的所有可能值。

源代码

public protocol CaseIterable {

    /// A type that can represent a collection of all values of this type.
    associatedtype AllCases : Collection = [Self] where Self == Self.AllCases.Element

    /// A collection of all values of this type.
    static var allCases: Self.AllCases { get }
}
Swift

使用代码示例

enum Rating: String, CaseIterable {
    case excellent
    case good
    case average
    case poor
}
Swift

在这个例子中,Rating 是一个枚举,表示不同的评级。通过遵循 CaseIterable 协议,Swift 会自动为这个枚举生成一个名为 allCases 的静态属性,您可以使用它来获取所有的枚举值。

CaseIterable 的作用

  1. 自动生成 allCases 属性:当枚举遵循 CaseIterable 协议时,Swift 会自动创建一个 allCases 属性,返回一个包含所有枚举值的数组。例如,您可以这样访问所有评级:
let allRatings = Rating.allCases
print(allRatings) // 输出: [Rating.excellent, Rating.good, Rating.average, Rating.poor]
Swift

2. 简化迭代:使用 allCases,您可以轻松地迭代枚举的所有值,这在需要显示所有选项(如在用户界面中)时非常有用:

for rating in Rating.allCases {
    print(rating.rawValue) // 输出每个 Rating 的字符串值 
}
Swift

3. 提高代码可读性:通过使用 CaseIterable,代码变得更加简洁和易于理解,避免了手动维护枚举值的数组。

使用场景

退出移动版