簡體   English   中英

無法將類型“ Any”的值分配為類型“ String”?Swift 3(iOS)

[英]Can not assign a value of type “Any” to type “String?” Swift 3 (iOS)

我想從服務器獲取令牌,然后將其分配給令牌變量,以便可以將其作為標頭傳遞到.post請求方法中。

var token = ["X-Auth-Token": ""]

分配過程

token["X-Auth-Token"] = response.result.value!

完成此操作后,我得到了錯誤

無法將類型“任何”的值分配給類型“字符串?”

如何繞過或解決此問題?

全班:

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!
        }
    }
}

我建議這種方法:

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 if let tokenString = response.result.value as? String您將在嘗試將response.result.value為字符串之前檢查它是否為字符串。

始終嘗試避免顯式拆開這樣的可選內容

token["X-Auth-Token"] = response.result.value as! String

如果由於某種原因response.result.value不是String,則您的應用程序將崩潰。 可選選項的主要目的是保護您免遭此類崩潰的影響。

如果是字符串,則強制轉換為字符串

@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
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM