gpt4 book ai didi

json - 快速获取 Json 5

转载 作者:行者123 更新时间:2023-11-30 10:30:59 25 4
gpt4 key购买 nike

我正在尝试从 swift 5 中的 api 获取一些数据

我收到此错误

Member 'success' in 'Result<[Suggestion], SuggestionError>' produces result of type 'Result', but context expects 'Result<[Suggestion],

这个函数给我带来了问题。如果我评论给我带来麻烦的行,它会打印 canNotProcessData

func getSuggestions (completion: @escaping(Result<[Suggestion], SuggestionError>) -> Void){
let dataTask = URLSession.shared.dataTask(with: resourceURL) { data, response, error in
guard let jsonData = data else{
completion(.failure(.noDataAvailable))
return
}
print(response!)
do{
let decoder = JSONDecoder()
let suggestionReponse = try decoder.decode(Suggestion.self, from: jsonData)
let suggestions = suggestionReponse

completion(.success(Suggestion))

}catch{
completion(.failure(.canNotProcessData))
}

}
dataTask.resume()
}

这是我的建议结构

struct Suggestion:Decodable{
var id: Int
var hometeam: String
var awayteam: String
var hometeamLogo: String
var awayteamLogo: String
var bet: String
var value: Double
var stake: Int
var bookieOdds: Double
}

这是我从 api 收到的示例

[
{
"id": 132,
"hometeam": "Afjet Afyonspor",
"awayteam": "Sancaktepe Belediyespor",
"hometeamLogo": "https://media.api-football.com/teams/3565.png",
"awayteamLogo": "https://media.api-football.com/teams/3604.png",
"bet": "2",
"value": 1.19,
"stake": 1,
"bookieOdds": 2.55
},

{
"id": 152,
"hometeam": "Bolívar",
"awayteam": "Blooming",
"hometeamLogo": "https://media.api-football.com/teams/3702.png",
"awayteamLogo": "https://media.api-football.com/teams/3701.png",
"bet": "2",
"value": 3.18,
"stake": 1,
"bookieOdds": 11
}
]

最佳答案

您应该更好地准确地显示整个消息:

Member 'success' in 'Result<[Suggestion], SuggestionError>' produces
result of type 'Result<Success, Failure>', but context expects
'Result<[Suggestion], SuggestionError>'

这显然是错误的,因为您在此处传递类型名称:

            completion(.success(Suggestion))

但是在这行之前,你有一件事错了:

            let suggestionReponse = try decoder.decode(Suggestion.self, from: jsonData)

JSON 响应的最外层结构是一个数组 ([ ... ]),您需要将其解码为 Array 建议,而不是建议:

请尝试这样的事情:

    func getSuggestions(completion: @escaping(Result<[Suggestion], SuggestionError>) -> Void){
let dataTask = URLSession.shared.dataTask(with: resourceURL) { data, response, error in
guard let jsonData = data else{
completion(.failure(.noDataAvailable))
return
}
print(response!)
do{
let decoder = JSONDecoder()
//### Use `[Suggestion].self`, not `Suggestion.self`
let suggestions = try decoder.decode([Suggestion].self, from: jsonData)
completion(.success(suggestions)) //###Use the response, not the type name
} catch {
print(error) //### This gives you some hints on how to solve the error cases
completion(.failure(.canNotProcessData))
}
}
dataTask.resume()
}

关于json - 快速获取 Json 5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59231606/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com