gpt4 book ai didi

ios - 使用 Decodable 链接多个 JSON 请求 - Swift 5

转载 作者:可可西里 更新时间:2023-11-01 01:06:57 28 4
gpt4 key购买 nike

我的“url”对象有一个链接,该链接捕获用户在搜索栏中键入的内容以完成链接,然后开始 JSON 过程。在 JSON 完成解析后,第一个链接以另一个链接响应。在我的 if let validLink = result.link 中,您会看到我将链接信息存储到一个数组中。现在我不确定我是否应该在我的 if let validLink = result 中开始另一个 JSON 响应,或者我是否应该像我在下面的代码中尝试做的那样创建一个新函数并基本上复制和在下面粘贴相同的 JSON 信息以重新解析它。第二个链接出现解析错误。最有效和正确的方法是什么?我真的被困在这里了。

我尝试创建另一个函数,该函数使用来自第一个 JSON 解析的信息使用新链接再次重新解析。

func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
searchBar.resignFirstResponder()

if let searchText = searchController.searchBar.text, !searchText.isEmpty {
let url = URL(string: "http://djp-dev/api/item?q=\(String(describing: searchText))&dev=1")
let task = URLSession.shared.dataTask(with: url!) { (data, response, error) in
guard let data = data,
error == nil else {
print(error?.localizedDescription ?? "Response Error")
return }

do {
let jsonResult = try JSONDecoder().decode(Response.self, from: data)
let resultsArray = jsonResult.results

for result in resultsArray {
if let validLink = result.link {
print(validLink)
self.collectLink.append(validLink)
self.mainParse()
}
}

} catch {
print("Parse Error")
}
}
task.resume()
}
}

func mainParse() {
let url = URL(string: "http://djp-dev\(collectLink[0])?dev=1")
print(url!)
let task = URLSession.shared.dataTask(with: url!) { (data, response, error) in
guard let data = data,
error == nil else {
//print(error?.localizedDescription ?? "Response Error")
return }

do {
let jsonResult = try JSONDecoder().decode(JSONResponse.self, from: data)
let mainArray = jsonResult.locations

for main in mainArray {
print("""
Manufacture = \(main.rid)
Description = \(main.description)
""")
/*if let validLink = result.description! {
}*/
}

} catch {
print("Parse Error")
}
}
task.resume()

DispatchQueue.main.async {
self.tableView.reloadData()
}

}

我主要是向 http://djp-dev/api/item?q=\(String(describing: searchText))&dev=1 询问它发回给我的响应中的链接。我想使用它发送给我的链接来启动另一个 JSON 请求。我不确定我是应该将它全部保留在一个请求中,还是应该使用一个全新的 JSON 请求创建一个全新的函数。 if let validLink = result.link { }是我收到第二个链接信息的时候。

最佳答案

所以我想通了。我使用的是没有 CodingKeys 的 Decodable。感谢 Vadian 为我指明了正确的方向。这是我的例子:

struct Response : Decodable {
let results: [Results]

enum CodingKeys: String, CodingKey {
case results = "photos"
}
}

struct Results : Decodable {
let url : String?

enum CodingKeys: String, CodingKey {
case url = "url"
}
}

关于ios - 使用 Decodable 链接多个 JSON 请求 - Swift 5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57433089/

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