gpt4 book ai didi

swift - 用 Moya 处理缓存

转载 作者:可可西里 更新时间:2023-10-31 23:55:14 44 4
gpt4 key购买 nike

我们已经在我们的项目中将 Moya、RxSwift 和 Alamofire 作为 pod 实现。

有谁知道如何使用此技术控制每个 url 请求的缓存策略?

我已经通读了 Moya 的 GitHub 页面上的很多问题,但仍然找不到任何内容。还尝试使用存储为 sampleData 文件的实际 json 响应,如下所示:

var sampleData: Data {
guard let path = Bundle.main.path(forResource: "SampleAggregate", ofType: "txt") else {
return "sampleData".utf8Encoded
}
let sample = try? String(contentsOfFile: path, encoding: String.Encoding.utf8)
return sample!.utf8Encoded

}

提前感谢您提供任何专业提示:)

最佳答案

据我所知,解决此问题的“最干净”方法是使用自定义 Moya 插件。这是一个实现:

protocol CachePolicyGettable {
var cachePolicy: URLRequest.CachePolicy { get }
}

final class CachePolicyPlugin: PluginType {
public func prepare(_ request: URLRequest, target: TargetType) -> URLRequest {
if let cachePolicyGettable = target as? CachePolicyGettable {
var mutableRequest = request
mutableRequest.cachePolicy = cachePolicyGettable.cachePolicy
return mutableRequest
}

return request
}
}

要实际使用这个插件,还剩下两个必需的步骤:

  1. 插件应该像这样添加到您的 Moya 提供程序:

    let moyaProvider = MoyaProvider<YourMoyaTarget>(plugins: [CachePolicyPlugin()])
  2. YourMoyaTarget应该符合 CachePolicyGettable 并因此为每个目标定义缓存策略:

    extension YourMoyaTarget: CachePolicyGettable {
    var cachePolicy: URLRequest.CachePolicy {
    switch self {
    case .sampleTarget, .someOtherSampleTarget:
    return .reloadIgnoringLocalCacheData

    default:
    return .useProtocolCachePolicy
    }
    }
    }

注意:此方法使用协议(protocol)将缓存策略与目标类型相关联;人们也可以通过传递给插件的闭包来实现这一点。然后,此类闭包将根据作为输入参数传递给闭包的目标类型来决定使用哪个缓存策略。

关于swift - 用 Moya 处理缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48516806/

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