问题描述
在以下示例中,如何根据 SwiftUI 更新 activeSheet
和 aArrived
的方式更改 bArrived
的值?
struct ContentView: View {
@AppStorage("didAArrive") var aArrived: Bool = false
@AppStorage("didBArrive") var bArrived: Bool = false
enum ActiveSheet: Identifiable {
case aArrived,bArrived
var id: Int {
hashValue
}
}
@State private var activeSheet: ActiveSheet?
var body: some View {
Text("Hello")
.sheet(
item: $activeSheet,content: { item in
switch item {
case .aArrived:
Text("A arrived")
case .bArrived:
Text("B arrived")
}
}
)
}
}
解决方法
您可以为工作表创建自定义装订,根据 aArrived
和 bArrived
获取其值。绑定值将根据 aArrived
或 bArrived
进行初始化,并在每次更改时更新。
struct ContentView: View {
@AppStorage("didAArrive") var aArrived: Bool = false
@AppStorage("didBArrive") var bArrived: Bool = false
enum ActiveSheet: Identifiable {
case aArrived,bArrived
var id: Int {
hashValue
}
}
var body: some View {
let sheetBinding = Binding<ActiveSheet?>(
get: {
if aArrived && bArrived {
return ActiveSheet.aArrived
} else if aArrived {
return ActiveSheet.aArrived
} else if bArrived {
return ActiveSheet.bArrived
} else {
return nil
}
},set: { _ in }
)
VStack(spacing: 20) {
Toggle("A arrived",isOn: $aArrived)
Toggle("B arrived",isOn: $bArrived)
}
.sheet(
item: sheetBinding,content: { item in
switch item {
case .aArrived:
Text("A arrived")
case .bArrived:
Text("B arrived")
}
}
)
}
}