我想从服务器获取令牌,然后将其分配给令牌变量,以便我可以将其作为我的.post请求方法中的标头传递。
var token = ["X-Auth-Token": ""]
分配流程
token["X-Auth-Token"] = response.result.value!
执行此操作后,我收到错误
无法指定类型的值"任何"输入" String?"
如何绕过或修复此问题?
全班:
import Alamofire
import UIKit
class InitialViewController: UIViewController {
let url = "https://api.sis.kemoke.net/auth/login"
var parameters = ["email": "", "password": ""]
var token = ["X-Auth-Token": ""]
// Parameters textfields
@IBOutlet weak var email: UITextField?
@IBOutlet weak var password: UITextField?
// A method for the login button
@IBAction func loginButton(_ sender: UIButton) {
parameters["email"] = email?.text
parameters["password"] = password?.text
Alamofire.request(url, method: .post, parameters: parameters, encoding: URLEncoding.httpBody, headers: nil).responseJSON {
(response) in
print(response.result.value!)
token["X-Auth-Token"] = response.result.value!
}
}
}
答案 0 :(得分:3)
我会建议这种方法:
Alamofire.request(url, method: .post, parameters: parameters, encoding: URLEncoding.httpBody, headers: nil).responseJSON {
(response) in
if let tokenString = response.result.value as? String {
token["X-Auth-Token"] = tokenString
}
}
通过使用if let tokenString = response.result.value as? String
,您将在尝试将其转换为String之前检查response.result.value
是否为String。
始终尝试避免明确解开像这样的可选:
token["X-Auth-Token"] = response.result.value as! String
如果response.result.value
由于某种原因而不是字符串,那么您的应用就会崩溃。
可选项的主要目的是保护您免受此类崩溃。
答案 1 :(得分:-2)
如果是字符串
,则转换为字符串@IBAction func loginButton(_ sender: UIButton) {
parameters["email"] = email?.text
parameters["password"] = password?.text
Alamofire.request(url, method: .post, parameters: parameters, encoding: URLEncoding.httpBody, headers: nil).responseJSON {
(response) in
print(response.result.value?)
token["X-Auth-Token"] = response.result.value as? String
}