Ios 将SwiftUI警报或操作表绑定到值类型模型属性的可选性(当属性为nil时显示视图)的好方法是什么?

Ios 将SwiftUI警报或操作表绑定到值类型模型属性的可选性(当属性为nil时显示视图)的好方法是什么?,ios,swift,swiftui,Ios,Swift,Swiftui,SwiftUI警报和操作表采用布尔绑定,但我希望在模型属性为nil时显示我的。模型属性是var servicePlayer:Player,我希望在网球发球选手还未被选中时提供一份警告或行动表(nil),但我不确定什么是解决这个问题的好方法 我的模型层由值类型structs组成,因此目前不能将属性标记为@Published。将我的整个模型层重构为类引用类型,以便能够采用Combine(我依赖于模型实例是值类型副本来撤消和重做),这听起来不值得,但我可能错了 struct Match: Codabl

SwiftUI警报和操作表采用布尔绑定,但我希望在模型属性为
nil
时显示我的。模型属性是var servicePlayer:Player,我希望在网球发球选手还未被选中时提供一份警告或行动表(
nil
),但我不确定什么是解决这个问题的好方法

我的模型层由值类型
struct
s组成,因此目前不能将属性标记为
@Published
。将我的整个模型层重构为
引用类型,以便能够采用Combine(我依赖于模型实例是值类型副本来撤消和重做),这听起来不值得,但我可能错了

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

$isPresented
绑定只是一个占位符。由于
servicePlayer
开始时为
nil
,因此,我们的想法是在网球比赛中,当servicePlayer再次为
nil
且尚未被选中时,警报将首先出现,但也会在网球比赛中再次出现。

正如您可能理解的那样,
.alert的
参数
需要绑定

我假设
Match
在您的视图中是一个
@State
属性:

struct ContentView: View {
   @State var match: Match

   var body: some View { ... }
}
这意味着,当更改时,视图将重新计算。这意味着您可以使用
Binding.constant(bool)


由于
警报
将通过更改
匹配来修改状态

,因此最好显示一些最小值code@NewDev我刚刚添加了代码的相关部分,谢谢。
.alert(isPresented: .constant(match.servicePlayer == nil)) {
   Alert(...)
}