swift - 更改 Alamofire 中所有请求的 HTTP header

标签 swift http-headers alamofire nsurlrequest

我正在使用 Alamofire 进行网络调用。

主要功能如下:

public func request(URLRequest: URLRequestConvertible) -> Request {

...

    return request
}

所以我创建了 URLRequestConvertible 并运行了 Alamofire 的request 方法。同时我还尝试添加 HTTP header 。

public func request(URLRequest: URLRequestConvertible) -> Request {

URLRequest.setValue("\random()" , forHTTPHeaderField : "identifier"
URLRequest.setValue("\buildversion()" , forHTTPHeaderField : "build"

    return request
}

但是没有任何反应,没有添加标题!只有在请求方法调用之前添加的 header 存在。

问题是我相信 URLRequest 只是 get 而我不能 set 它。有什么解决方法吗?

public protocol URLRequestConvertible {
    /// The URL request.
    var URLRequest: NSMutableURLRequest { get }
}

有什么解决方法吗?

最佳答案

URLRequest 是一个结构,因此您可以修改方法本地副本;变化永远不会传播到外面。

你通过使参数inout来解决这个问题:

public func request(request: inout URLRequestConvertible) -> Request {
    ...
}

Call-site,你也必须显式标记参数:

let myRequest = ...
request(&myRequest)

注意事项:

  • 如果可访问性是问题所在,您就会收到编译器错误。
  • 官方编码风格指南告诉我们对变量使用小写字母。
  • 使用类型作为变量名不是很有用;有一个同名的方法就更不用说了。

关于swift - 更改 Alamofire 中所有请求的 HTTP header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40597430/

相关文章:

ios - 更新 iOS 8 -> iOS 9(新版本的 Swift)导致使用 Alamofire 的 REST API 问题(401 错误)

IOs App 在模拟器上运行但在设备上崩溃(主要使用 AVFoundation)

ios - 具有相同参数类型的 Swift 初始化器

swift - 钥匙串(keychain) SecItemUpdate 返回 errSecParam

c++ - 是否可以从 http header 中找到文件名

amazon-s3 - 如何使用 Amazon S3 存储桶策略设置 HTTP header ?

tomcat - SiteMinder FCC header 变量出现在 IIS 中但不出现在 AJP 连接的 Tomcat 中

ios - 无法使用 Alamofire 通过服务器上传音频文件

ios - 谷歌地图方向

ios - 如何在 Swift 中以编程方式将 HeaderView 从 nib 添加到 UiTableView