首页 > 解决方案 > 使用 swift 5 请求 AlamoFire url

问题描述

我刚刚发现这个方法写回去我改成AlamoFire.request&AF.request.responseSwiftyJSON { (dataResponse) in.responseJSON(completionHandler: { (dataResponse) in确实复制了它但我正在尝试使用它,我不熟悉 alamoFire 这是我第一次使用它,任何人都可以更新这个方法来请求来自 AlamoFire 的 URL 我正面临这些错误

1- isSuccess' 由于“内部”保护级别而无法访问

2-“结果”类型的值没有成员“值”

3- isFailure 因“内部”保护级别而无法访问

4-“结果”类型的值没有成员“错误”

@objc func searchPlaces(query: String) {
        let urlStr = "\(MapBox.mapbox_api)\(query).json?access_token=\(MapBox.mapbox_access_token)"

        AF.request(urlStr, method: .get, parameters: nil, encoding: URLEncoding.default, headers: nil).responseJSON(completionHandler: { (dataResponse) in

            if dataResponse.result.isSuccess {
                let resJson = JSON(dataResponse.result.value!)
                if let myjson = resJson["features"].array {
                    for itemobj in myjson ?? [] {
                        try? print(itemobj.rawData())
                        do {
                            let place = try self.decoder.decode(Feature.self, from: itemobj.rawData())
                            self.searchedPlaces.add(place)
                            self.tableView.reloadData()
                        } catch let error  {
                            if let error = error as? DecodingError {
                                print(error.errorDescription)
                            }
                        }
                    }
                }
            }

            if dataResponse.result.isFailure {
                let error : Error = dataResponse.result.error!
            }

            })

    }

标签: iosswiftxcodeurlalamofire

解决方案


对于isSuccess(1)、isFailure(3),您实际上可以打开response.result. 对于value响应结果中的 (2),您可以在response.value最后找到它,但并非最不重要的是,error(4) 在 switch 中可用,请查看下面的示例代码,该示例代码突出显示所有相关信息以使您的代码正常工作:

AF.request(urlStr, method: .get, parameters: nil, encoding: URLEncoding.default, headers: nil)
            .responseJSON(completionHandler: { response in
                switch response.result {
                case .success:
                    let resJSON = JSON(response.value)
                    ...
                case .failure(let error):
                    print(error)
                }
            })

推荐阅读