我在我的 iOS 应用程序中使用 Alamofire 进行联网。我需要在 iOS 7+ 中运行这个应用程序。我想在状态栏中指示网络活动,所以我创建了这个结构:
struct ActivityManager {
static var activitiesCount = 0
static func addActivity() {
if activitiesCount == 0 {
UIApplication.sharedApplication().networkActivityIndicatorVisible = true
}
activitiesCount++
}
static func removeActivity() {
if activitiesCount > 0 {
activitiesCount--
if activitiesCount == 0 {
UIApplication.sharedApplication().networkActivityIndicatorVisible = false
}
}
}
}
但我不知道,在哪里调用代码addActivity()
和removeActivity()
方法。我不想在每个请求中都写它们。我想,每个请求都会自动调用它们。
我也尝试使用纯NSURLSession
并NSURLSessionTask
扩展它们:
extension NSURLSessionTask {
func resumeWithActivity() {
ActivityManager.addAction()
self.resume()
}
}
public extension NSURLSession {
func OwnDataTaskWithRequest(request: NSURLRequest!, ownCompletionHandler: ((NSData!, NSURLResponse!, NSError!) -> Void)?) -> NSURLSessionDataTask! {
return self.dataTaskWithRequest(request, completionHandler: { (data, response, error) in
ActivityManager.removeAction()
ownCompletionHandler!(data, response, error)
})
}
}
然后我像这样使用它们:
var session: NSURLSession = NSURLSession(configuration: config, delegate: self, delegateQueue: nil)
session.OwnDataTaskWithRequest(request) { (data, response, error) -> Void in
// some logic here
}.resumeWithActivity()
但这种方法行不通。在 iOS 7 中NSURLSession
扩展是不可见的。我为此创建了一个错误报告(带有示例项目)。
你能给我一些建议,如何达到我的目标?有或没有 Alamofire?