我们可以为Alamofire会话管理器提供多个适配器吗?

时间:2016-09-28 14:16:12

标签: alamofire

我想在同一个SessionManager中有很多适配器,是否可能?

我的用例是:

从适配器设置默认标头

如果basic_auth:添加basic_auth_adapter

如果token_auth:添加token_auth_adapter

由于

2 个答案:

答案 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()])