我有一个控件,它设置一个 @State 变量来跟踪自定义选项卡视图中的选定选项卡。我可以通过设置以下内容在代码中设置 @State 变量:
@State var selectedTab: Int = 1
Run Code Online (Sandbox Code Playgroud)
如何以编程方式设置初始值,以便在创建视图时更改所选选项卡?
我尝试了以下方法:
1:
@State var selectedTab: Int = (parameter == true ? 1 : 2)
Run Code Online (Sandbox Code Playgroud)
2:
init(default: Int) {
self.$selectedTab = default
}
Run Code Online (Sandbox Code Playgroud)
kej*_*ion 25
我如何在其中一个视图中设置初始状态值的示例:
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")
}
Run Code Online (Sandbox Code Playgroud)
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
J. *_*ell -7
一旦我找到答案,解决这个问题就变得非常简单!
您只需通过更改以下声明来从初始化中删除初始值:
@State var selectedTab: Int = 1
Run Code Online (Sandbox Code Playgroud)
到:
@State var selectedTab: Int
Run Code Online (Sandbox Code Playgroud)
然后 selectedTab 变量自动成为实例化语句中的参数。所以初始化将是:
TabBarContentView(selectedTab: 2)
Run Code Online (Sandbox Code Playgroud)
就这么简单!!!!
归档时间: |
|
查看次数: |
7444 次 |
最近记录: |