簡體   English   中英

Model 是可散列和可識別的,但仍然不能使用 ForEach

[英]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
    }
}

我在這一點上已經筋疲力盡,試圖找出發生了什么,有人知道發生了什么嗎?

您需要將集合中的各個項目設置為IdentifiableHashable ,或者提供一個 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM