【问题标题】:How can I get data inside of completionHandler for Alamofire.responseJSon如何在 Alamofire.responseJSon 的 completionHandler 中获取数据
【发布时间】:2021-10-02 02:25:25
【问题描述】:

我目前正在为 Destiny 2 API 制作应用程序。

我正在努力解决这个问题

这是我将哈希数据生成项目名称的整个函数代码

我想返回最后被保护的名称变量,但是完成处理程序

在函数结束后运行。

我搜索了互联网,但几乎每个人都只是在其中使用了这些数据,而不是

函数返回。

我只需要“解析 json 并获取我想要的返回数据”

请问有什么办法吗?

item 参数表示“获取项目名称的项目哈希”
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)
        }
    }
}

【问题讨论】:

    标签: swift alamofire completionhandler


    【解决方案1】:
        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)
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-16
      • 1970-01-01
      相关资源
      最近更新 更多