我在視圖構建器函式中有一個 forEach 回圈,如下所示:
ForEach(0..<array.count, id: \.id) { index in
陣列包含一個自定義模型,它符合 Identifiable 并有一個 id。問題是當我在下面創建另一個 foreach 時:
ForEach(0..<anotherArray.count, id: \.id) { index in
現在, anotherArray 也具有該自定義模型型別。運行應用程式時,它只會顯示第一個 foreach,而 anotherArray 回圈不會顯示其中的內容。
我試圖丟棄 id: .id ,因為這使它可以這樣作業:
ForEach(viewModel.array.indices) { index in和
ForEach(viewModel.anotherArray.indices) { index in
它有效,但問題是我收到的警告:“非常量范圍:不是整數范圍”
我找不到一個干凈的解決方案!還值得一提的是,我需要回圈來回傳索引。
編輯:忘了提到這是在 LazyVStack 中,因為我需要 pinnedViews 引數。
謝謝
uj5u.com熱心網友回復:
規則是
indices,顯式整數范圍或原始陣列,如[String]或[Int]要求id: \.self。- 不符合
Identifiable但具有id屬性要求的物件id: \.id(或另一個可散列屬性)。 - 符合的物件可以
Identifiable省略id引數。
uj5u.com熱心網友回復:
發現可以.id(UUID())在每個 forEach 內的視圖中使用。它將在控制臺中記錄此警告:
LazyVStackLayout:ID 0 被多個子視圖使用,這將給出未定義的結果!
但這有效!雖然我必須說我不知道??這是否會產生任何奇怪的行為,但現在我沒有看到任何行為。
uj5u.com熱心網友回復:
這ForEach View不是一個 for 回圈。
您不能將它與陣列索引一起使用,因為如果陣列更改,它會崩潰,因為索引不是有效的識別符號。即,如果索引 1 處的專案移動到 0,它仍然具有索引 1。如果你想使用整數,那么它必須是一個靜態范圍,例如
ForEach(0..<5) { i in
}
否則,您必須為 ForEach 提供具有識別符號的結構陣列,或者更好地實作Identifiable協議和 id 屬性。
id:\.self通常是程式員錯誤,因為 id 應該是資料唯一識別符號的關鍵路徑,而不是資料本身。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/517502.html
標籤:IOS迅捷前锋
