使用 Alamofire 路由器显示活动指示器

Posted

技术标签:

【中文标题】使用 Alamofire 路由器显示活动指示器【英文标题】:Show activity indicator with Alamofire router 【发布时间】:2016-12-30 19:00:48 【问题描述】:

我创建了一个 Alamofire 路由器来管理我的所有 API 调用,如下所示 -

enum Router: URLRequestConvertible 
    static let baseURLString = "http://testapi.silive.in/api/"

    case getAll()

    func asURLRequest() throws -> URLRequest 
        var method: HTTPMethod 
            switch self 
            case .getAll():
                return .get
            


        

        let url: URL = 
            let relativePath: String
            switch self 
            case .getAll():
                relativePath = "get_list_"
            



            var url = URL(string: Router.baseURLString)
            url?.appendPathComponent(relativePath)
            return url!
        ()

        var urlRequest = URLRequest(url: url)
        urlRequest.httpMethod = method.rawValue
        let encoding = JSONEncoding.default
        return try encoding.encode(urlRequest, with: nil)

    


class APIManager 
    static let sharedInstance = APIManager()

    func getAllPapers() 
        Alamofire.request(Router.getAll()).responseString 
            response in
            if let recievedString = response.result.value 
                print(recievedString)
            
        
    

现在在我的视图控制器的viewDidLoad 方法中,我想调用APIManager.sharedInstance.getAllPapers() 并且在请求执行时需要显示一个活动指示器。

问题是我可以在调用方法之前启动活动指示器,但是如何停止指示器。 Alamofire 请求的完成块无权访问 VC 中存在的 activityIndi​​cator。

【问题讨论】:

【参考方案1】:

您可以在 getAllPapers 方法中创建 ApiManagerDelegate/Notification 或完成处理程序

编辑: 完成处理程序示例:

typealias Response = (String?) -> Void



class APIManager 
    static let sharedInstance = APIManager()

    func getAllPapers(completionHandler: Response) 
        Alamofire.request(Router.getAll()).responseString 
            response in

            if let recievedString = response.result.value 
                completionHandler(recievedString)
             else 
                completionHandler(nil)
            
        
    

现在你可以像这样使用它了

APIManager.sharedInstance.getAllPapers 
    (response) in
    print(response)
    self.activityIndicator .....

【讨论】:

您能否提供一些有关如何执行此操作的示例代码。我是 ios 开发新手。

以上是关于使用 Alamofire 路由器显示活动指示器的主要内容,如果未能解决你的问题,请参考以下文章

iOS 网络活动指示器未显示

在反应路由器中的路由之间显示一个简单的加载指示器

迁移 Swift 和更新 Alamofire 后,我的路由器无法工作

声明枚举路由器 Alamofire swift 3.0

你好我的路由器显示192.168.1.1;80 要求输入用户名和密码服务提示器提示NetcoreN

返回 POST 请求的 Alamofire 路由器