我想在同一个SessionManager中有很多适配器,是否可能?
我的用例是:
从适配器设置默认标头
如果basic_auth:添加basic_auth_adapter
如果token_auth:添加token_auth_adapter
由于
答案 0 :(得分:5)
目前在Alamofire 4中,每个RequestAdapter
只能使用1 SessionManager
。我们以这种方式设计它是因为如果有多个适配器,可以帮助您简化操作并避免订单问题。
您可以轻松地将所有这些功能添加到同一个适配器。我们的意图是,如果适配器变得太复杂,您可以将逻辑分解为多个较小的对象。您可以这样做的一种方法是为每种类型的URL请求创建一个较小的适配器。然后SessionManager
调用的主适配器将检查URL请求并调用适当的较小适配器。
答案 1 :(得分:1)
我想出了这个解决方案:
struct MasterAdapter: RequestAdapter {
let adapters: [RequestAdapter]
func adapt(_ urlRequest: URLRequest) throws -> URLRequest {
var request = urlRequest
try adapters.forEach({ request = try $0.adapt(request) })
return request
}
}
现在将使用其子适配器的MasterAdapter设置为默认或自定义SessionManager上的适配器。
SessionManager.default.adapter = MasterAdapter(adapters: [MyAdapter1(), MyAdapter2()])