SwiftUI:初始化不初始化数组
SwiftUI: Init not initialising arrays
我在初始化数组时遇到问题:
struct ProjectList: View
{
@ObservedObject var store: ProjectStore
@Binding var searchText: String
@State private var query: [Project] = []
@State private var indexes: [String] = ["E","F"]
init(store: ProjectStore, searchText: Binding<String>)
{
self.store = store
self._searchText = searchText
self.query = []
self.indexes = ["C","D"]
indexes = ["A","B"] //store.getIndexes(search: searchText.wrappedValue)
print (indexes)
}
}
indexes 在我的 init 例程中被设置为 ["E","F"] 而不是我所期望的 ["A","B"]。发生了什么事?
声明时不要初始化状态(因为它只初始化一次然后在视图生命周期内工作,即在body
)
@State private var indexes: [String] // << only declare
init(store: ProjectStore, searchText: Binding<String>)
{
...
self._indexes = State(initialValue: ["C","D"]) // initialise !!
@State 是 属性 包装器,这意味着它接受包装值的输入然后修改它,你不应该在 init 中设置 @State var,如果你真的想要,你必须直接设置 @State var在 init 中初始化它,你必须使用 @State 的 init,因为 @State 是一个带有 @ 语法糖的结构。变化
init(store: ProjectStore, searchText: Binding<String>)
{
self.store = store
self._searchText = searchText
self.query = []
self.indexes = ["C","D"]
indexes = ["A","B"] //store.getIndexes(search: searchText.wrappedValue)
print (indexes)
}
至:
init(store: ProjectStore, searchText: Binding<String>)
{
self.store = store
self._searchText = searchText
self.query = []
self.indexes = ["C","D"]
indexes = State(initialValue: ["C","D"]) //changed value
print (indexes)
}
我在初始化数组时遇到问题:
struct ProjectList: View
{
@ObservedObject var store: ProjectStore
@Binding var searchText: String
@State private var query: [Project] = []
@State private var indexes: [String] = ["E","F"]
init(store: ProjectStore, searchText: Binding<String>)
{
self.store = store
self._searchText = searchText
self.query = []
self.indexes = ["C","D"]
indexes = ["A","B"] //store.getIndexes(search: searchText.wrappedValue)
print (indexes)
}
}
indexes 在我的 init 例程中被设置为 ["E","F"] 而不是我所期望的 ["A","B"]。发生了什么事?
声明时不要初始化状态(因为它只初始化一次然后在视图生命周期内工作,即在body
)
@State private var indexes: [String] // << only declare
init(store: ProjectStore, searchText: Binding<String>)
{
...
self._indexes = State(initialValue: ["C","D"]) // initialise !!
@State 是 属性 包装器,这意味着它接受包装值的输入然后修改它,你不应该在 init 中设置 @State var,如果你真的想要,你必须直接设置 @State var在 init 中初始化它,你必须使用 @State 的 init,因为 @State 是一个带有 @ 语法糖的结构。变化
init(store: ProjectStore, searchText: Binding<String>)
{
self.store = store
self._searchText = searchText
self.query = []
self.indexes = ["C","D"]
indexes = ["A","B"] //store.getIndexes(search: searchText.wrappedValue)
print (indexes)
}
至:
init(store: ProjectStore, searchText: Binding<String>)
{
self.store = store
self._searchText = searchText
self.query = []
self.indexes = ["C","D"]
indexes = State(initialValue: ["C","D"]) //changed value
print (indexes)
}