如何在 SwiftUI 中以编程方式设置 @State 变量
How do I set an @State variable programmatically in SwiftUI
我有一个控件,它设置一个@State 变量来跟踪自定义选项卡视图中的选定选项卡。我可以通过设置以下内容在代码中设置@State 变量:
@State var selectedTab: Int = 1
如何以编程方式设置初始值,以便在创建视图时更改所选选项卡?
我试过以下方法:
1:
@State var selectedTab: Int = (parameter == true ? 1 : 2)
2:
init(default: Int) {
self.$selectedTab = default
}
一旦我找到答案,这个问题就很容易解决了!
您只需通过更改声明从初始化中删除初始值:
@State var selectedTab: Int = 1
至:
@State var selectedTab: Int
然后selectedTab变量自动成为实例化语句中的参数。所以初始化将是:
TabBarContentView(selectedTab: 2)
就这么简单!!!!!
Joe Groff:“@State
SwiftUI 中的变量不应根据您通过初始化程序传递下来的数据进行初始化。正确的做法是将初始状态值设置为内联:”
@State var selectedTab: Int = 1
您应该使用 Binding 来访问非您视图本地的状态。
@Binding var selectedTab: Int
然后你可以从 init 初始化它,你仍然可以将它传递给子视图。
来源:https://forums.swift.org/t/state-messing-with-initializer-flow/25276/3
我如何在其中一个视图中设置初始状态值的示例:
struct TodoListEdit: View {
var todoList: TodoList
@State var title = ""
@State var color = "None"
init(todoList: TodoList) {
self.todoList = todoList
self._title = State(initialValue: todoList.title ?? "")
self._color = State(initialValue: todoList.color ?? "None")
}
我有一个控件,它设置一个@State 变量来跟踪自定义选项卡视图中的选定选项卡。我可以通过设置以下内容在代码中设置@State 变量:
@State var selectedTab: Int = 1
如何以编程方式设置初始值,以便在创建视图时更改所选选项卡?
我试过以下方法:
1:
@State var selectedTab: Int = (parameter == true ? 1 : 2)
2:
init(default: Int) {
self.$selectedTab = default
}
一旦我找到答案,这个问题就很容易解决了!
您只需通过更改声明从初始化中删除初始值:
@State var selectedTab: Int = 1
至:
@State var selectedTab: Int
然后selectedTab变量自动成为实例化语句中的参数。所以初始化将是:
TabBarContentView(selectedTab: 2)
就这么简单!!!!!
Joe Groff:“@State
SwiftUI 中的变量不应根据您通过初始化程序传递下来的数据进行初始化。正确的做法是将初始状态值设置为内联:”
@State var selectedTab: Int = 1
您应该使用 Binding 来访问非您视图本地的状态。
@Binding var selectedTab: Int
然后你可以从 init 初始化它,你仍然可以将它传递给子视图。
来源:https://forums.swift.org/t/state-messing-with-initializer-flow/25276/3
我如何在其中一个视图中设置初始状态值的示例:
struct TodoListEdit: View {
var todoList: TodoList
@State var title = ""
@State var color = "None"
init(todoList: TodoList) {
self.todoList = todoList
self._title = State(initialValue: todoList.title ?? "")
self._color = State(initialValue: todoList.color ?? "None")
}