ios - 使用 Alamofire 路由器显示事件指示器

标签 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)
            }
        }
    }
}

现在在我的 View Controller 的 viewDidLoad 方法中,我想调用 APIManager.sharedInstance.getAllPapers() 并且在执行请求时需要显示事件指示器。

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

最佳答案

您可以在 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 路由器显示事件指示器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41401346/

相关文章:

ios - 我需要提交以供 Facebook 应用审查吗?

ios - 如何在初始化函数中将委托(delegate)设置为 self ?

ios - Swift自定义表格 View 单元格未解析的标识符

ios - 使用 Mapbox 聚类注释

ios - 条件绑定(bind)的初始化程序必须具有 Optional 类型,而不是 'UIView'

ios - 类型 'AnyObject' 不符合协议(protocol) 'NSFetchRequestResult'

ios - 创建用于空投、iOS 的自定义 UTI

ios - 在 Google Sign In 调用 App Delegate 中的方法后关闭 View Controller (iOS/Swift)

swift - 单击 UITableViewCell 时

ios - 尝试使用 Alamofire 在 Swift 3 中解析 JSON