iOS Swift Alamofire缓存策略
在iOS Swift Alamofire缓存策略,ios,swift,alamofire,Ios,Swift,Alamofire,在AlamofireVersion3中,我使用NSURLRequest.CachePolicy.returnCacheDataDontLoad进行请求缓存 let URLRequest = NSMutableURLRequest(url: URL(string: url)!) URLRequest.cachePolicy = NSURLRequest.CachePolicy.returnCacheDataDontLoad Alamofire.request(URLRequest)
Alamofire
Version3中,我使用NSURLRequest.CachePolicy.returnCacheDataDontLoad
进行请求缓存
let URLRequest = NSMutableURLRequest(url: URL(string: url)!)
URLRequest.cachePolicy = NSURLRequest.CachePolicy.returnCacheDataDontLoad
Alamofire.request(URLRequest){...}
但是如何在Alamofire 4和swift 3中使用cachePolicy
谢谢我到处搜索,结果是:
let TheURL = DEFAULT_APP_URL + "api/getList?Id="+ID
let urlString = NSURL(string: TheURL)
var mutableURLRequest = URLRequest(url: urlString! as URL)
mutableURLRequest.httpMethod = "GET"
mutableURLRequest.setValue("application/json", forHTTPHeaderField: "Content-Type")
mutableURLRequest.cachePolicy = NSURLRequest.CachePolicy.returnCacheDataElseLoad
Alamofire.request(mutableURLRequest)
.responseJSON
{....}
这是我的工作代码
private static func request(_ showHud: Bool = true, urlString: String,
httpMethod: HTTPMethod,
parameters: [String : Any] = [:],
headers: [String : Any] = [:],
success : @escaping SuccessBlock,
failure : @escaping ErrorBlock) {
var additionalHeaders: HTTPHeaders?
additionalHeaders = headers as? HTTPHeaders
guard let url = URL(string: urlString) else { return }
var urlRequest = URLRequest(url: url)
if !(NetworkReachabilityManager()?.isReachable ?? false) {
urlRequest.cachePolicy = .returnCacheDataDontLoad
} else {
showIndicator(showHud)
}
urlRequest.allHTTPHeaderFields = additionalHeaders
urlRequest.httpMethod = httpMethod.rawValue
do {
urlRequest = httpMethod == .get ? try URLEncoding.default.encode(urlRequest, with: parameters) : try JSONEncoding.default.encode(urlRequest, with: parameters)
} catch {
failure(NSError(localizedDescription: "Something went wrong!"))
}
Alamofire.request(urlRequest).responseObject { (response: DataResponse<ResponseHandler>) in
parseResponse(response, success: success, failure: failure)
}
}
private static func请求(uuhud:Bool=true,urlString:String,
httpMethod:httpMethod,
参数:[字符串:任意]=[:],
标题:[字符串:任意]=[:],
成功:@escaping SuccessBlock,
失败:@转义错误块){
var additionalHeaders:HTTPHeaders?
additionalHeaders=标题为?HTTPHeaders
guard let url=url(字符串:urlString)else{return}
var urlRequest=urlRequest(url:url)
if!(NetworkReachabilityManager()?.isReachable?false){
urlRequest.cachePolicy=.returnCacheDataDontLoad
}否则{
显示指示器(显示HUD)
}
urlRequest.allHTTPHeaderFields=附加标头
urlRequest.httpMethod=httpMethod.rawValue
做{
urlRequest=httpMethod==.get?尝试URLEncoding.default.encode(urlRequest,带:参数):尝试jsonencodeding.default.encode(urlRequest,带:参数)
}抓住{
失败(N错误(本地化描述:“出现问题!”)
}
中的Alamofire.request(urlRequest).responseObject{(响应:DataResponse)
parseResponse(响应,成功:成功,失败:失败)
}
}
关键是在从缓存加载数据之前,我检查了internet连接。如果internet可用,我将显示加载程序,它将加载api,如果不可用,它将从缓存中提供数据