如何在 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")
    }