swift - 如何在 SwiftUI 中将变量从“更高视图”转换为“下视图”?
问题描述
我是 SwiftUI 的新手,我知道如何在我的“特殊”情况下使用UserDefaults.standard.integer将变量“Selection”从 ContentView 获取到 SettingView 中。我认为使用@Binding 是不可能的,对吧?
import SwiftUI
import Combine
struct ContentView: View {
@State var Selection = UserDefaults.standard.integer(forKey: "Picker")
@State var Detail = false
var body: some View {
VStack {
Button(action: {
self.Detail.toggle()
}) {
Text("click")
}.sheet(isPresented: $Detail) {
SettingView(showSheetView: self.$Detail)
}
Picker("", selection: $Selection) {
Text("Selection1").tag(0)
Text("Selection2").tag(1)
} .pickerStyle(SegmentedPickerStyle()).padding(.horizontal, 89)
.onReceive(Just(Selection)) {
UserDefaults.standard.set($0, forKey: "Picker")
}
}
}
}
struct SettingView: View {
@Binding var showSheetView: Bool
var body: some View {
NavigationView {
Text("Test")
.navigationBarTitle(Text("Select something"))
.navigationBarItems(trailing: Button(action: {
self.showSheetView = false
}) {
Text("Ok")
.bold()
})
}
}
}
解决方案
您可以使用@Binding
:
.sheet(isPresented: $Detail) {
// pass the `Selection` as a Binding
SettingView(showSheetView: self.$Detail, selection: $Selection)
}
struct SettingView: View {
@Binding var showSheetView: Bool
@Binding var selection: Int // access as a Binding
var body: some View {
NavigationView {
Text("Test \(selection)") // use as any other variable
...
}
}
}
注意:在命名 Swift 变量时,通常最好使用小写,即。selection
而不是Selection
。
推荐阅读
- arrays - C: 结构数组上的 qsort() -- 返回垃圾
- numpy - ImportError: numpy.core.multiarray 导入失败 (2021)
- python - Python 插件架构,其中插件是包
- cplex - Pyomo 关闭 cplex 的 presolve
- function - 设定时间后停止功能
- authentication - 隐式流现在比授权码流更流行吗?
- pytorch - 如何量化以 GRUCell 作为子模块的模块
- powermock - 使用 powermock 和 jbehaves 时遇到问题
- podio - GLobiflow Json 解码
- gitlab - 在我自己的 repo 中编写新代码时,如何使用另一个镜像 repo 使我的项目的当前发布版本保持最新