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

时间:2016-12-30 19:00:49

标签: ios swift swift3 alamofire

我创建了一个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 个答案:

答案 0 :(得分: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 .....
}