无法指定类型的值"任何"键入" String?" Swift 3(iOS)

时间:2016-12-12 19:49:18

标签: ios swift

我想从服务器获取令牌,然后将其分配给令牌变量,以便我可以将其作为我的.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!
        }
    }
}

2 个答案:

答案 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
    }