无法调用视图中的结构

Can't call the struct in the view

我有一个代码,应该匹配 2 个 JSON 文件并将所有数据连接到一个结构中。我很确定它工作得很好,但我遇到了一个非常奇怪的问题。我想做一个选择器:


import SwiftUI


struct CurrencyView: View {
    
    @ObservedObject var api = CurrencyViewModel()
    
    @State private var pickerSelection1 = 1
    
    var body: some View {
        Text("f")
        Picker("", selection: $pickerSelection1) {
            ForEach(0..<self.api.currencies.fullName.count) { // Error here
                let currency = api.currencies.fullName[[=10=]] // and here
        Text(currency)
        }
    }
.id(UUID())
.labelsHidden()
.padding(.leading)
    }
}


struct CurrencyView_Previews: PreviewProvider {
    static var previews: some View {
        CurrencyView()
    }
}

显示此错误:

Value of type '[Currency]' has no member 'fullName'

我知道我想念某事并感到愚蠢,因为我不明白为什么。谢谢回复!)

添加其余代码:

// Model


import Foundation

struct CurrencyModel: Codable {
    var results: [String:Double]
}

struct CurrencyNewModel: Codable {
    var currencies: [String:String]
}

struct Currency: Decodable {
    let currencyCode: String
    let fullName: String
    var price: Double
} 
// View Model

import SwiftUI


class CurrencyViewModel: ObservableObject {
    
    @Published var currencies: [Currency] = []

          init() {
              fetchNewData { [self] (currency) in
                  switch currency {
                  case .success(let names):
                      print("Success")
                      DispatchQueue.main.async {
                      self.currencies = names.currencies.map {
                          Currency(currencyCode: [=13=].key, fullName: [=13=].value, price: 0)
                        }
                      }
                      fetchData { result in
                          switch result {
                          case .success(let prices):
                              print("Success")
                              
                              
                              for (index, value) in currencies.enumerated() {
                                  if let price = prices.results.first(where: { [=13=].key == value.currencyCode }) {
                                      DispatchQueue.main.async {
                                      currencies[index].price = price.value
                                      }
                                  }
                              }
                          case .failure(let error):
                              print(error)
                          }
                      }
                  case .failure(let error):
                      print("Error", error)
        }
    }
}
      
     
    
   
    
func fetchData(completion: @escaping (Result<CurrencyModel,Error>) -> ()) {
    guard let url = URL(string: "https://api.fastforex.io/fetch-all?from=USD&api_key=7ffe65c2ef-926f01d9e8-r7eql2") else { return }
    URLSession.shared.dataTask(with: url) { data, responce, error in
        if let error = error {
            completion(.failure(error))
            return
        }
        
        guard let safeData = data else { return }
        
        do {
            let currency = try JSONDecoder().decode(CurrencyModel.self, from: safeData)
            completion(.success(currency))
        }
        catch {
            completion(.failure(error))
        }
    }
    .resume()
    
    
    }
    func fetchNewData(completion: @escaping (Result<CurrencyNewModel,Error>) -> ()) {
        guard let url = URL(string: "https://api.fastforex.io/currencies?api_key=7ffe65c2ef-926f01d9e8-r7eql2") else { return }
        URLSession.shared.dataTask(with: url) { data, responce, error in
            if let error = error {
                completion(.failure(error))
                return
            }
            
            guard let safeData = data else { return }
            
            do {
                let currency = try JSONDecoder().decode(CurrencyNewModel.self, from: safeData)
                completion(.success(currency))
            }
            catch {
                completion(.failure(error))
            }
        }
        .resume()
        
    }

}


P.S。如果您想查看 API,请查看 fetchDatafetchNewData 中的链接,这是免费试用版,所以没关系

您的错误显示:
Value of type '[Currency]' has no member 'fullName'

看来api.currencies是一个数组——数组本身没有成员fullName,只有一个元素有。

试试这个:

    ForEach(api.currencies, id:\.currencyCode) { currency in
        Text(currency.fullName)
    }