【问题标题】:How to separate API calling class in swift with Alomofire?如何使用 Alamofire 快速分离 API 调用类?
【发布时间】:2021-07-27 13:58:15
【问题描述】:

我想创建自己的网络管理器类,这样我就可以像没有互联网一样在全局范围内处理错误,然后我只能显示该类的弹出窗口。我正在为此使用 Alomofire,并且还想在 swiftjson 库的帮助下解析 JSON 中的数据。我已尝试使用我的代码,但无法将数据从我的网络类传递到调用函数的位置。

import UIKit
import Alamofire
import SwiftyJSON
import SystemConfiguration

class WebServiceHelper: NSObject {

typealias SuccessHandler = (JSON) -> Void
typealias FailureHandler = (Error) -> Void

// MARK: - Internet Connectivity

class func isConnectedToNetwork() -> Bool {

    var zeroAddress = sockaddr_in()
    zeroAddress.sin_len = UInt8(MemoryLayout<sockaddr_in>.size)
    zeroAddress.sin_family = sa_family_t(AF_INET)

    guard let defaultRouteReachability = withUnsafePointer(to: &zeroAddress, {
        $0.withMemoryRebound(to: sockaddr.self, capacity: 1) {
            SCNetworkReachabilityCreateWithAddress(nil, $0)
        }
    }) else {
        return false
    }

    var flags: SCNetworkReachabilityFlags = []
    if !SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags) {
        return false
    }

    let isReachable = flags.contains(.reachable)
    let needsConnection = flags.contains(.connectionRequired)

    return (isReachable && !needsConnection)
}

// MARK: - Helper Methods

class func getWebServiceCall(_ strURL : String, isShowLoader : Bool, success : @escaping SuccessHandler, failure : @escaping FailureHandler) {
        if isConnectedToNetwork()  {

            print(strURL)

            if isShowLoader == true {

                //AppDelegate.getDelegate().showLoader()
            }

            AF.request(strURL).responseJSON { (resObj) -> Void in
                print(resObj.result)
            }
        }else {
            //CommonMethods.showAlertWithError("", strMessage: Messages.NO_NETWORK, withTarget: (AppDelegate.getDelegate().window!.rootViewController)!)
        }
    }

}

// 从控制器调用

func getData() {
        WebServiceHelper.getWebServiceCall("http://3.16.229.165/webservice/getFollowingList", isShowLoader: false, success: { (responceObj) in
            
            print("success => \(responceObj)")
        }
            
        , failure: { (failureObj) in
            print("failureObj = \(failureObj)")
        })
    }

// API 响应数据

{
    "status": false,
    "followers": false,
    "message": "You are not yet following anyone"
}

【问题讨论】:

    标签: ios swift api


    【解决方案1】:

    你想念success(value)

    AF.request(strURL).responseJSON { (resObj) -> Void in 
       switch resObj.result {
           case .success(let value):
               let res = JSON(value)
               success(res)
           case .failure(let error):
               failure(error) 
       } 
    }
    

    【讨论】:

    • 为什么我们在最后使用success(resObj.result),因为它在没有它的情况下工作
    猜你喜欢
    • 2014-09-28
    • 2015-04-22
    • 1970-01-01
    • 2020-12-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-29
    • 2021-10-08
    • 1970-01-01
    相关资源
    最近更新 更多