【问题标题】:Show activity indicator with Alamofire router使用 Alamofire 路由器显示活动指示器
【发布时间】: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。

【问题讨论】:

    标签: ios swift swift3 alamofire


    【解决方案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 开发新手。
    猜你喜欢
    • 1970-01-01
    • 2017-04-26
    • 2012-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-01
    • 2019-02-04
    • 2016-12-12
    相关资源
    最近更新 更多