如何解决SwiftUI:绑定到@AppStorage
在以下示例中,如何根据 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")
}
}
)
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。