ios - 如何为 Alamofire 响应设置委托(delegate)

标签 ios swift

我是 IOS 的新手。我正在使用 Alamofire 进行网络请求。我在以下方面非常成功......

  1. 带参数请求
  2. 显示事件指标
  3. 获取响应并隐藏事件指示器
  4. 将响应解析为模态

我对 OOP 有很好的概念。我有很好的 android 工作经验。在 android 中,我用来为服务创建一个集中类,并从事件中调用它,然后我使用回调传递结果。

通过这种方式,它更加紧凑并且避免了我一次又一次地编写相同的代码。我搜索了一下,发现委托(delegate)与 java/android 中的回调/接口(interface)是一样的。

我的问题:

Can Any one tell me how to make a Alamofire code in one class and how to call that from other View controllers with different number and type of parameters. and with different type of results to send back into related View controller? is it possible and how using swift??

最佳答案

使用 WebServicesCall 或您喜欢的名称创建一个 swift 文件并使用以下代码。我在这里使用 SwiftyJSONAlamofire

import UIKit
import Alamofire
import SwiftyJSON

struct WebService {
static func requestService(url: URL, method: HTTPMethod, parameters: Parameters, headers: HTTPHeaders? = nil, showLoaderFlag: Bool, viewController: UIViewController, completion: @escaping (_ success: JSON) -> Void) {
        /* check for internet connection */
        if(Reachability.isConnectedToNetwork()) {
            /* Show Loader here */

            print("Web Service - \(url)")
            print("Header - \(String(describing: headers))")
            print("Parameters - \(parameters)")

            /* Request configure */
            AlmofireService.Manager.request(url, method: method, parameters: parameters, encoding: JSONEncoding.default, headers: header) .responseJSON { response in
                print("Response - \(response)")

                switch response.result {
                case .success(_):
                    /* Hide loader here */

                    let json = JSON(response.result.value!)

                    completion(json)

                case .failure(_):
                    print("Request failed with error: \(response.result.error ?? "" as! Error)")

                    if response.result.error?._code == NSURLErrorTimedOut {
                        //TODO: show response time out alert or message here
                    } else {
                        //TODO: show response failure alert or message here
                    }

                    /* Hide loader here */

                    completion(JSON.null)
                }
            }
        } else {
            print("No internet connection")

            //TODO: show no internet connection alert or message here

            let json: JSON = ["status": "nointernet",
                          "code": 503]
            completion(json)
        }
    }
    }

然后在需要的时候调用如下

func callWebService() {
        let parameters: [String: Any] = ["key": "value"] //for post request
        let headers: [String: String] = ["key": "value"]
        let url = //your url here

        WebService.requestService(url: url, method: .post, parameters: parameters, headers: headers, showLoaderFlag: true, viewController: self, completion: { response in

            guard response["code"].int != 503 else {
                print("No internet connection")
                return
            }

            guard response != .null else {
                return
            }

            /* Handle your success response here */

        })
    }

关于ios - 如何为 Alamofire 响应设置委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50961933/

相关文章:

ios - 如何在 swift 3.0 中合并两个结构并在 uitableviewcell 中打印两者的值

ios - 如何在 iOS 中使用 CorePlot 制作充满颜色的垂直范围图?

ios - 如何更改等待 SKScene 运行的 SKAction 的持续时间?

ios - 在 VS for Mac 中无法查看个人团队配置文件

ios - 滚动时,光标跟随滚动而不是停留在 iOS 上的字段中?

swift - Xcode swift UI 测试对比两张截图

iOS @IBOutlet views all be nil only in iOS 8

ios - Swift 中的 setObject 等价物

arrays - Swift 中的 NSIndexPath

ios - Swift 中的标签动画