簡體   English   中英

如何在正文視圖中使用計數器來填充列表

[英]How do I use a counter within body View to fill a list

我是 Swift 的新手,嘗試通過嘗試新事物來感受它。 現在我被列表困住了。 我有兩個arrays,一個是產品,另一個是每個產品的價格。 我想使用 ForEach 循環來填充列表。 我使用 HStack 有兩列。

為了更清楚一點,這里有兩個 arrays:

@state private var products = ["Coke", "Fanta", "Sprite", "Water]
private var prices = ["1,43$", "1,22$", "1,64$", "0,45$"]

現在這是我的 ContentView.swift 的一部分:

var body: some View {
    List{
        ForEach(products, id: \.self) { product in
        HStack{
            Text(product)
            Spacer()
            Text(price[products.firstIndex(of: product)])
        }
    }
}

所以我的計划是,通過遍歷產品數組,用產品名稱填充每個單元格。 然后我要顯示相應的價格。 為此,我使用我的第二個文本並用價格填充它。 為了找到價格數組的正確索引,我從我的產品數組中獲取索引,因為它們是相似的。

那是我的解決方案,但現在我收到products.firstIndex(of: product)的錯誤。

我收到以下錯誤:

可選類型“Array.Index?”的值? (又名“可選”)必須展開為“Array.Index”類型的值(又名“Int”)

我真的不明白這個錯誤試圖告訴我什么。

有人可以幫忙嗎?

正確的代碼如下所示:

struct ContentView: View {

    private var products = ["Coke", "Fanta", "Sprite", "Water"]
    private var prices = ["1,43$", "1,22$", "1,64$", "0,45$"]

    var body: some View {
        List{
            ForEach(products, id: \.self) { product in
                HStack{
                    Text(product)
                    Spacer()
                    Text(self.prices[self.products.firstIndex(of: product)!])
                }
            }
        }
    }
}

錯誤的原因是數組在某個時候可能為空,如果您在那一刻嘗試讀取 firstIndex 會導致崩潰。

現在你有兩個選擇:

  1. 用“.”強制解包就像我在上面所做的那樣,如果您確定數組永遠不會被清除/為空。
  2. 如果該值在某個時候可能為零,則使用“?? value”提供默認值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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