如何解决如何在 Alamofire.responseJSon 的 completionHandler 中获取数据
我目前正在为 Destiny 2 API 制作应用程序。
我正在努力解决这个问题
我想返回最后保护的 name 变量,但是那个完成处理程序
在函数结束后运行。
我在互联网上搜索过,但几乎每个人都只是在其中使用这些数据,而不是
函数返回。
我只需要“解析json并获取我想要的返回数据”
有什么想法吗?
item 参数的意思是“ item hash 来获取它的名字”
lang 参数表示“返回的语言”,如果是“en”则返回英文。
这是我也删减的数据“https://pastebin.com/1tV6fx9F”
func hashToName(item: String,lang: String = "ko") (" want to return String "-> String ){
let url = String(format: "https://www.bungie.net/platform/Destiny2/Manifest/DestinyInventoryItemDeFinition/\(item)")
let param: [String: String] = ["lc": "\(lang)"]
let head: HTTPHeaders = ["x-api-key": "b21e4d2d33234b82be6e56893554974b"]
let doNetwork = AF.request(url,method:.get,parameters: param,encoder: URLEncodedFormParameterEncoder.default,headers: head)
doNetwork.responseJSON {
response in
switch response.result {
case .success(let site):
guard let dict = site as? NSDictionary else { return }
guard let res = dict["Response"] as? NSDictionary else { return }
guard let prop = res["displayProperties"] as? NSDictionary else { return }
guard let name: String = prop["name"] as? String else { return }
print(name) // data I want to return
case .failure(let err):
print(err.localizedDescription)
}
}
}
解决方法
func hashToName(item: String,lang: String = "ko",returnString: @escaping (String)->()) {
let url = String(format: "https://www.bungie.net/platform/Destiny2/Manifest/DestinyInventoryItemDefinition/\(item)")
let param: [String: String] = ["lc": "\(lang)"]
let head: HTTPHeaders = ["x-api-key": "b21e4d2d33234b82be6e56893554974b"]
let doNetwork = AF.request(url,method:.get,parameters: param,encoder: URLEncodedFormParameterEncoder.default,headers: head)
doNetwork.responseJSON {
response in
switch response.result {
case .success(let site):
guard let dict = site as? NSDictionary else { return }
guard let res = dict["Response"] as? NSDictionary else { return }
guard let prop = res["displayProperties"] as? NSDictionary else { return }
guard let name: String = prop["name"] as? String else { return }
returnString(name)
print(name) // data I want to return
case .failure(let err):
print(err.localizedDescription)
}
}
}
//How to use
hashToName(item: "Your string") { str in
print(str)
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。