You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift遵循EndPoint协议结构体如何合并默认与传入的Alamofire HTTPHeaders

问题根源

  1. 你当前定义的headers是纯计算属性,没有对应的存储容器存放外部传入的自定义头部,get方法每次调用都会重新生成只包含默认规则的头部集合,因此init中传入的header没有持久化存储的位置,不会生效。
  2. 现有set方法没有实现存储逻辑,即使赋值也不会保留内容,若直接在get中拼接set传入的值,还会出现重复添加的问题。
  3. 原EndPoint协议中headers属性未声明{ get set },不支持写操作,需要先补全协议定义。

修复方案

第一步:补全协议定义

protocol EndPoint {
  var url: URL { get }
  var method: HTTPMethod { get }
  var parameters: Parameters? { get set }
  var headers: HTTPHeaders? { get set } // 补全读写权限声明
}

第二步:改造APIConstructor实现

新增私有存储属性专门存放自定义头部,合并逻辑放在get方法中统一处理,Alamofire的HTTPHeaders自带的合并逻辑会自动覆盖同名头部,自定义头部优先级高于默认头部,不会出现重复问题。
修改后的完整代码:

struct APIConstructor: NetworkEndPoint {
    var url: URL
    var method: HTTPMethod
    var parameters: Parameters?
    // 私有存储容器,保存外部传入的自定义头部
    private var customHeaders: HTTPHeaders?

    init(urlString: String,
         method: HTTPMethod = .get,
         parameters: Parameters? = nil,
         headers: HTTPHeaders? = nil) {
        url = URLGenerator.path(endPoint: urlString, service: service)
        self.method = method
        self.parameters = parameters
        // 直接存储传入的头部即可
        self.customHeaders = headers
        print("+++++++++ \(self.headers)")
    }
    
    var headers: HTTPHeaders? {
        get {
            // 生成默认头部
            var finalHeaders: HTTPHeaders = [HTTPHeader(name: "Content-type", value: contentType.rawValue)]
            if let token = LoggedUserDetails.shared.token {
                finalHeaders.add(HTTPHeader.authorization(bearerToken: token))
            }
            // 合并自定义头部,同名头部自定义值会覆盖默认值
            if let custom = customHeaders {
                finalHeaders.add(contentsOf: custom)
            }
            return finalHeaders
        }
        set {
            // 存储外部设置的头部
            customHeaders = newValue
        }
    }
}

效果说明

  • 无自定义头部传入时,返回默认的Content-Type和鉴权头部
  • 有自定义头部传入时,自动合并到默认头部集合中,同名字段以自定义传入值为准
  • 合并逻辑仅在每次get调用时执行一次,不会出现重复添加的问题

内容的提问来源于stack exchange,提问作者Usama bin Attique

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 05:00:02