我有一個簡單的串列,其中包含每個單詞物件的文本欄位(只是一個帶有 ID 的字串)
當我嘗試在我的應用程式中移動行時,XCode 在控制臺中列印此警告:
“ForEach<Binding<Array>, UUID, TextField>:ID D5F23F6F-82BB-43AD-9ECF-DEA1B56AB345 在集合中出現多次,這將給出未定義的結果!”
為什么會這樣?
如果我使用 Text 而不是 TextField,則不會出現警告。
這是我的單詞結構:
struct Word: Identifiable, Hashable {
let id: UUID = UUID()
var str: String
init(_ str: String) {
self.str = str
}
}
我的串列如下所示:
struct ReorderTest: View {
@State private var items = [Word("Chicken"), Word("Pork"), Word("Beef")]
var body: some View {
NavigationView {
List {
// USING TEXTFIELD LEADS TO WARNINGS
ForEach($items, id: \.self.id) { $item in
TextField("item", text: $item.str)
}
// USING TEXT DOES NOT LEAD TO WARNINGS
// ForEach(items, id: \.self.id) { item in
// Text(item.str)
// }
.onMove(perform: move)
.onDelete(perform: delete)
}
.toolbar {
ToolbarItem(placement: .navigationBarTrailing) {
EditButton()
}
}
}
}
func delete(at offsets: IndexSet) {
self.items.remove(atOffsets: offsets)
}
func move(from source: IndexSet, to destination: Int) {
self.items.move(fromOffsets: source, toOffset: destination)
}
}
uj5u.com熱心網友回復:
試試這個,對我有用:
func move(from source: IndexSet, to destination: Int) {
DispatchQueue.main.async {
self.items.move(fromOffsets: source, toOffset: destination)
}
}
請注意,您可以簡單地使用ForEach($items), 因為Wordis Identifiable。為什么會發生這種情況,我不知道,我們無權訪問move.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/489122.html
