Связанное состояние перечисления в SwiftUI
Как я могу использовать связанное перечисление в качестве @State
переменная в if
заявление в SwiftUI?
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.
2 ответа
Решение
Вот фиксированный вариант. Протестировано с 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")
}
}
}
}
Вам нужно использовать if case
проверить, есть ли enum
переменная соответствует определенному case
.
var body: some View {
if case .simple = choice {
return Text("Simple")
} else {
return Text("Not so simple")
}
}
Если вы действительно хотите использовать связанное значение для отображения, я бы предложил использовать switch
покрыть все enum
случаи.
var body: some View {
let text: String
switch choice {
case .simple:
text = "Simple"
case .associated(let value):
text = "\(value)"
}
return Text(text)
}