【发布时间】:2018-01-09 14:38:32
【问题描述】:
我有以下源代码。我有一个 AlamoFire SessionManager 和一个使用该 SessionManager 发出 HTTP 请求的 ViewController。
var Almgr : Alamofire.SessionManager = {
// Create the server trust policies
let serverTrustPolicies: [String: ServerTrustPolicy] = [
"localhost": .disableEvaluation
]
// Create custom manager
let configuration = URLSessionConfiguration.default
UserDefaults.standard.synchronize()
var jwt = UserDefaults.standard.string(forKey: conf.JWT_KEY)
var headers : HTTPHeaders = Alamofire.SessionManager.defaultHTTPHeaders
let extraHeaders : HTTPHeaders = [
"Authorization": "Bearer "+(jwt ?? ""),
"Accept": "application/json"
]
extraHeaders.forEach({ (k, v) in
headers[k] = v
})
configuration.httpAdditionalHeaders = headers
let man = Alamofire.SessionManager(
configuration: configuration,
serverTrustPolicyManager: ServerTrustPolicyManager(policies: serverTrustPolicies)
)
return man
}()
从上面的代码中,您可以看到,我正在阅读 UserDefaults.standard.string 以获取 JWT 令牌的值并在我发出的每个 HTTP 请求中发送它。
我使用这个 Almgr 的方式很简单,就像从视图控制器中一样,
Almgr.request("my-url", method: .get).validate().responseJSON { response in
然而问题是,Almgr 似乎只初始化了一次,即使我通过将 JWT 令牌设置为不同的值来更改它,通过,
UserDefaults.standard.set(jwt, forKey: conf.JWT_KEY) 在 UserDefaults 中,它的值没有被获取。
在视图控制器中,我有以下代码:
print("Getting JWT in MyViewController", UserDefaults.standard.string(forKey: conf.JWT_KEY))
Almgr.request("my-url", method: .get).validate().responseJSON { response in
打印语句为 JWT 令牌打印一个不同(正确)的值,而不是使用启动应用程序时存在的旧 JWT 的 Almgr。
现在我的问题是,我怎样才能让 Almgr 在调用时总是懒惰地评估正确的 JWT 值。
如果重要的话,我正在使用 Alamofire 4.5 和 Swift 4.0。
【问题讨论】: