我有一个控件,该控件设置一个@State变量以跟踪自定义选项卡视图中的所选选项卡。我可以通过设置以下内容在代码中设置@State变量:
@State var selectedTab: Int = 1
如何通过编程方式设置初始值,以便在创建视图时更改选定的标签?
我尝试了以下方法:
1:
@State var selectedTab: Int = (parameter == true ? 1 : 2)
2:
init(default: Int) {
self.$selectedTab = default
}
答案 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")
}