SwiftUI 警报和操作表采用布尔绑定,但我希望我的警报和操作表在模型属性为 时显示nil。模型属性是var servicePlayer: Player!,我希望在尚未选择网球发球运动员时显示警报或操作表 ( nil),但我不确定什么是解决此问题的好方法。
我的模型层由值类型组成struct,因此目前将属性标记为@Published不是一个选项。class将我的整个模型层重构为能够采用组合的引用类型听起来并不值得(我依赖于模型实例作为值类型副本来撤消和重做),但我可能是错的。
struct Match: Codable {
...
var servicePlayer: Player!
...
}
.alert(isPresented: $isPresented) {
Alert(title: Text("Who will serve?"),
primaryButton: .default(Text("You")) {
match.servicePlayer = .playerOne
},
secondaryButton: .default(Text("Opponent")) {
match.servicePlayer = .playerTwo
})
}
Run Code Online (Sandbox Code Playgroud)
绑定$isPresented只是一个占位符。从servicePlayer一开始nil,我们的想法是首先显示警报,但稍后在网球比赛中再次出现发球手nil但尚未选择时再次出现。
正如您可能理解的,isPresented的参数.alert需要一个Binding<Bool>.
我认为Match这是@State您认为的财产:
struct ContentView: View {
@State var match: Match
var body: some View { ... }
}
Run Code Online (Sandbox Code Playgroud)
这意味着当情况发生变化时,视图将重新计算。这意味着您可以使用您的特定情况Binding.constant(bool):
.alert(isPresented: .constant(match.servicePlayer == nil)) {
Alert(...)
}
Run Code Online (Sandbox Code Playgroud)
因为Alert会通过改变 来修改状态match。
| 归档时间: |
|
| 查看次数: |
1047 次 |
| 最近记录: |