[英]Model is hashable and Identifiable but still can't use ForEach
我已經做了 8 個多小時,一遍又一遍地重構代碼,但我無法讓它工作,我認為這是:
ForEach(allWalletsData.walletList) { walletKey in
WalletStackView(user: user, walletAddress: walletKey)
}
它抱怨說:如果我嘗試另一種組合,則value of type 'String' has no member 'walletList'
:
ForEach(allWalletsData.walletList) { walletKey in
WalletStackView(user: user, walletAddress: walletKey)
}
它說: referencing initializer 'init(_:content:)' on 'ForEach' requires that 'String' conform to 'Identifiable'
在我的 model 中,我已經用 1000 種不同的方式編寫了它,但仍然......不起作用。
里面的信息不能是static,因為我刷新API,數據會發生變化。
這是我試過的 model:
struct AllWalletsData: Decodable, Encodable {
init(walletList: [String], walletsData: OrderedDictionary<String, WalletInformation>, combinedWalletTokensQuotesFormatted: String) {
self.walletList = walletList
self.walletsData = walletsData
self.combinedWalletTokensQuotesFormatted = combinedWalletTokensQuotesFormatted
}
let walletList: [String]
let walletsData: OrderedDictionary<String, WalletInformation>
let combinedWalletTokensQuotesFormatted: String
}
extension AllWalletsData: Hashable, Identifiable {
var id: [String] { walletList }
func hash(into hasher: inout Hasher) {
hasher.combine(combinedWalletTokensQuotesFormatted)
}
static func ==(lhs: AllWalletsData, rhs: AllWalletsData) -> Bool {
if lhs.combinedWalletTokensQuotesFormatted != rhs.combinedWalletTokensQuotesFormatted {
return false
}
return true
}
}
我在這一點上已經筋疲力盡,試圖找出發生了什么,有人知道發生了什么嗎?
您需要將集合中的各個項目設置為Identifiable
或Hashable
,或者提供一個 ID,而不是使AllWalletsData
Identifiable
。
您的收藏是allWalletsData.walletList
- 根據您的 model,這是[String]
類型。 因此,一種選擇是:
ForEach(allWalletsData.walletList, id: \.self) { walletKey in
WalletStackView(user: user, walletAddress: walletKey)
}
這告訴 SwiftUI 使用String
作為每個項目的id
(這看起來就像你試圖通過執行var id: [String] { walletList }
來完成的。
請注意,如果walletAddress
不包含真正唯一的元素,這(使用id: \.self
)可能會導致不可預知的結果。 通往 go 的另一條途徑是為您的錢包定義一個具有真正唯一 ID(如UUID
)的 model。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.