【发布时间】:2022-01-04 04:25:29
【问题描述】:
我正在尝试使用组合框架解析来自网站 alphavantage.com 的股票数据。尽管我的数据模型具有与 json 匹配的正确值,但我仍不断收到此 error Swift.DecodingError.Context(codingPath: [], debugDescription: "No value associated with key CodingKeys(stringValue: \"bestMatches\", intValue: nil) (\"bestMatches\").", underlyingError: nil))。我该如何解决这个问题?
struct SearchResults: Decodable{
let bestMatches : [SearchResult]
enum CodingKeys: String, CodingKey{
case bestMatches = "bestMatches"
}
}
struct SearchResult : Decodable{
let symbol : String?
let name : String?
let type : String?
let currency :String?
enum CodingKeys:String, CodingKey{
case symbol = "1. symbol"
case name = "2. name"
case type = "3. type"
case currency = "8. currency"
}
}
struct APIservice{
let apiKey = "U893NJLDIREGERHB"
func fetchSymbols(keyword:String)-> AnyPublisher<SearchResults,Error>{
let urlSTring = "https://www.alphavantage.co/query?function=\(keyword)H&keywords=tesco&apikey=U893NJLDIREGERHB"
let url = URL(string: urlSTring)!
return URLSession.shared.dataTaskPublisher(for: url)
.map({$0.data})
.decode(type: SearchResults.self, decoder: JSONDecoder())
.receive(on: RunLoop.main)
.eraseToAnyPublisher()
}
}
func performSearch(){
apiSerivice.fetchSymbols(keyword: "S&P500").sink { (completion) in
switch completion {
case .failure(let error):
print(error)
case . finished:
break
}
} receiveValue: { (SearchResults) in
print(SearchResults.bestMatches)
}.store(in: &subcribers)
【问题讨论】:
-
这不是一个有效的查询。您要使用的“功能”是什么?
-
performSearch 功能是我想要使用的。它在 viewdidload 中被调用
-
正如@George 所说:
It's not a valid query。 P.S:请勿发布您的密钥。