gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 15:58:36 25 4
gpt4 key购买 nike

我创建了一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com