SwiftUI 中的关联枚举状态

Edw*_*rey 2 enums swift associated-value swiftui

如何在 SwiftUI@Stateif语句中使用关联的枚举作为变量?

struct ProfileView: View {
    @State private var choice = Choice.simple

    private enum Choice {
        case simple
        case associated(Int)
    }

    var body: some View {
        if choice == .simple {
            Text("Simple")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

编译器报这个错误:

协议“Equatable”要求“ProfileView.Choice”符合“Equatable”

Dáv*_*tor 5

您需要使用if case来检查enum变量是否与某个case.

var body: some View {
    if case .simple = choice {
        return Text("Simple")
    } else {
        return Text("Not so simple")
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您确实想使用要显示的关联值,我建议使用 aswitch来涵盖所有enum情况。

var body: some View {
    let text: String
    switch choice {
    case .simple:
        text = "Simple"
    case .associated(let value):
        text = "\(value)"
    }
    return Text(text)
}
Run Code Online (Sandbox Code Playgroud)


Asp*_*eri 5

这是固定变体。使用 Xcode 11.4 进行测试。

struct ProfileView: View {
    @State private var choice = Choice.simple

    private enum Choice: Equatable {
        case simple
        case associated(Int)
    }

    var body: some View {
        Group {
            if choice == .simple {
                Text("Simple")
            } else {
                Text("Other")
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)