我创建了一个 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 中存在的 activityIndicator。
最佳答案
您可以在 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/