使用 Alamofire 路由器显示活动指示器
Posted
技术标签:
【中文标题】使用 Alamofire 路由器显示活动指示器【英文标题】:Show activity indicator with Alamofire router 【发布时间】: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 中存在的 activityIndicator。
【问题讨论】:
【参考方案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 开发新手。以上是关于使用 Alamofire 路由器显示活动指示器的主要内容,如果未能解决你的问题,请参考以下文章
迁移 Swift 和更新 Alamofire 后,我的路由器无法工作