3

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

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")
        }
    }
}

编译器报告此错误:

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

4

2 回答 2

5

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

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

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

var body: some View {
    let text: String
    switch choice {
    case .simple:
        text = "Simple"
    case .associated(let value):
        text = "\(value)"
    }
    return Text(text)
}
于 2020-06-03T13:07:06.850 回答
4

这是固定的变体。使用 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")
            }
        }
    }
}
于 2020-06-03T13:11:24.040 回答