具有关联值的枚举不符合 CaseIterable 并引发错误

Sha*_*e D -1 enums ios swift

以下枚举工作正常,没有任何错误。

enum EnumOptions: CaseIterable {
        case none
        case mild
        case moderate
        case severe
        case unmeasurable
}
Run Code Online (Sandbox Code Playgroud)

当我尝试向其中一种情况添加关联值时,它会引发以下错误“类型‘EnumOptions’不符合协议‘CaseIterable’。您要添加协议存根吗?”

enum OedemaOptions: CaseIterable {
        case none
        case mild
        case moderate
        case severe
        case unmeasurable(Int)
}
Run Code Online (Sandbox Code Playgroud)

添加存根后,

enum OedemaOptions: CaseIterable {
        typealias AllCases = <#type#>

        case none
        case mild
        case moderate
        case severe
        case unmeasurable(Int)
Run Code Online (Sandbox Code Playgroud)

应该在占位符中填写什么以使 Enum 符合 CaseIterable,因为只有 1 个具有关联值的案例而不是所有案例?

Sub*_*pan 11

自动合成不适用于具有关联值的枚举。您需要提供 allCases 属性的自定义实现。尝试,

enum OedemaOptions: CaseIterable {
    static var allCases: [OedemaOptions] {
        return [.none, .mild, .moderate, .severe, .unmeasurable(-1)]
    }
    
    case none
    case mild
    case moderate
    case severe
    case unmeasurable(Int)
}
Run Code Online (Sandbox Code Playgroud)


小智 8

您忘记考虑所有 18,446,744,073,709,551,616 Ints。

另外,每个都是一个Option,而不是一个Options

static var allCases: [OedemaOption] {
  [.none, .mild, .moderate, .severe]
  + (.min...(.max)).map(unmeasurable)
}
Run Code Online (Sandbox Code Playgroud)