Swift 找不到Alamofire缓存

Swift 找不到Alamofire缓存,swift,alamofire,nsurlcache,Swift,Alamofire,Nsurlcache,我一直在尝试通过以下配置为Alamofire 5.0设置缓存: private func buildURLCache()->URLCache{ 让容量=50*1024*1024//MBs #如果目标环境(macCatalyst) 返回URLCache(内存容量:容量,磁盘容量:容量) #否则 返回URLCache(内存容量:容量,磁盘容量:容量,磁盘路径:无) #恩迪夫 } private func defaultSessionManager(uRequestInterceptor:reques

我一直在尝试通过以下配置为Alamofire 5.0设置缓存:

private func buildURLCache()->URLCache{
让容量=50*1024*1024//MBs
#如果目标环境(macCatalyst)
返回URLCache(内存容量:容量,磁盘容量:容量)
#否则
返回URLCache(内存容量:容量,磁盘容量:容量,磁盘路径:无)
#恩迪夫
}
private func defaultSessionManager(uRequestInterceptor:requestInterceptor?->Alamofire.Session{
let求值器:[字符串:ServerTrustEvaluating]=[
“google.com”:PinnedCertificatesTrustEvaluator(证书:pinnedCertificates())
]
//创建自定义管理器
let configuration=URLSessionConfiguration.af.default
configuration.headers=HTTPHeaders.default
configuration.requestCachePolicy=.useProtocolCachePolicy
URLCache.shared=buildURLCache()
configuration.urlCache=urlCache.shared
返回Alamofire.Session(
配置:配置,
拦截器:请求拦截器,
serverTrustManager:serverTrustManager(评估者:评估者))
}
函数
defaultSessionManager(41;
返回
Alamofire
的配置实例,我将其作为强引用,并执行如下请求(不要担心,这只是一个示例):

let alamofireManager=defaultSessionManager(nil)
func getFoos(
令牌:字符串,
完成:@escaping(Result)->Void){
ALAMOFIRAMAGER.request(
“google.com”,
编码:JSONEncoding.default,
标题:标题(令牌))
.validate()
.responseJSON{(dataResponse:AFDataResponse)位于
如果让cacheData=URLCache.shared.cachedResponse(for:dataResponse.request!){
打印(“URLCache.shared Data来自缓存”)
}否则{
打印(“URLCache.shared数据来自服务器”)
}
如果让cacheData=URLCache.shared.cachedResponse(for:(dataResponse.request?.urlRequest!)){
打印(“URLCache.shared urlRequest数据来自缓存”)
}否则{
打印(“URLCache.shared urlRequest数据来自服务器”)
}
//....
}
}
不幸的是,函数
URLCache.shared.cachedResponse
返回
nil
,导致函数仅打印
。。。数据来自服务器
。应用程序从未从缓存中获取数据,你知道为什么会发生这种情况吗


谢谢大家!

这里有几个问题

首先,当前
response.request
返回Alamofire看到的最后一个
URLRequest
,它不一定是通过网络执行并发出的
URLRequest
。要查看该值,您实际上需要捕获Alamofire
请求
,并检查其
任务?.currentRequest
属性。这将为您提供通过Alamofire和执行的
URLSession的
URLRequest
。我们正在研究让这些
URLRequest
s也可以在响应中使用

其次,如果您只想检查是否收到了缓存响应,最好检查
urlsessionaskmetrics
值,因为这将提供一个明确的答案,而无需检查
URLCache

response.metrics?.transactionMetrics.last?.resourceFetchType

如果此值为
.localCache
,则您知道您的响应来自缓存。

完美答案。我试图设置它并检查它是否为
.localCache
,但它一直返回false。有什么建议吗?我试图检查
alamofireManager.sessionConfiguration.urlCache
,但它没有返回
nil
。最终,确认您是从缓存还是从网络加载的最简单方法是使用Charles Proxy之类的工具拦截您的web流量,并查看是否正在进行调用。这肯定会告诉你一种或另一种方式。这是不可能的,我没有使用缓存进行调试。我只是想确保属性正确指示是否从缓存加载了某些内容,而不是作为长期解决方案。Alamofire本身不做任何缓存。相反,它依赖于
URLSession
和底层
URLCache
根据请求的
cachePolicy
缓存
URLRequest
s。默认情况下,该值为
.useProtocolCachePolicy
,它将根据服务器的配置缓存响应,如缓存头。如果希望始终缓存响应,而不考虑服务器配置,则需要更改该值,无论是针对每个请求还是针对
URLSessionConfiguration