Edw*_*rey 2 enums swift associated-value swiftui
如何在 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")
}
}
}
Run Code Online (Sandbox Code Playgroud)
编译器报这个错误:
协议“Equatable”要求“ProfileView.Choice”符合“Equatable”
您需要使用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)
这是固定变体。使用 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)
归档时间: |
|
查看次数: |
1870 次 |
最近记录: |