如何在SwiftUI中以编程方式设置@State变量

时间:2019-06-14 05:23:14

标签: swiftui

我有一个控件,该控件设置一个@State变量以跟踪自定义选项卡视图中的所选选项卡。我可以通过设置以下内容在代码中设置@State变量:

@State var selectedTab: Int = 1

如何通过编程方式设置初始值,以便在创建视图时更改选定的标签?

我尝试了以下方法:

1:

@State var selectedTab: Int = (parameter == true ? 1 : 2)

2:

init(default: Int) {
    self.$selectedTab = default
}

3 个答案:

答案 0 :(得分:0)

一旦找到答案,解决起来就这么简单!

您只需更改以下声明即可从初始化中删除初始值:

@State var selectedTab: Int = 1

收件人:

@State var selectedTab: Int

,然后selectedTab变量自动成为实例化语句中的参数。因此初始化将是:

TabBarContentView(selectedTab: 2)

就这么简单!!!!!

答案 1 :(得分:0)

Joe Groff:“不应从通过初始化程序传递的数据中初始化SwiftUI中的@State变量。正确的做法是内联设置初始状态值:”

@State var selectedTab: Int = 1

您应该使用绑定来提供对视图非本地状态的访问。

@Binding var selectedTab: Int

然后您可以从init对其进行初始化,并且仍然可以将其传递给子视图。

来源:https://forums.swift.org/t/state-messing-with-initializer-flow/25276/3

答案 2 :(得分:0)

在一个视图中如何设置初始状态值的示例:

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")
    }