2016-12-12 9 views
0

私はサーバからトークンを取り出し、それをトークン変数に割り当てたいので、私の.postリクエストメソッドでヘッダとして渡すことができます。「文字列」に「Any」タイプの値を割り当てることはできません。 Swift 3(iOS)

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

答えて

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を使用することによりresponse.result.valueがStringにキャストしようとする前に、文字列であるかどうかをチェックします。 response.result.valueが何らかの理由ではなく、あなたのアプリがクラッシュする文字列のため、ある場合

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

は、必ず明示的にこのようなオプションのをunwraping 避けるようにしてください。 オプションの主な目的は、そのようなクラッシュからあなたを守ることです。文字列へ

+1

だ場合 - 'print'文は、クラッシュの原因となります。 'if let'の内部に移動します。 – rmaddy

+0

ありがとうございます。私は答えから 'print'を削除しました。それは実装にとって本当に重要ではないからです。 – JPetric

-2

キャスト、それは文字列FYI

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

これをしないでください。これは、 'response.result.value'が' nil'であるか、本当に 'String'でないなら、クラッシュします。 – rmaddy

+0

また、 "guard"や "let"を使うこともできます – nick

+0

面白いのは、 'print'文でオプションをアンラッピングしてから、オプションの型を使って値を代入するということです。これは意味をなさない、クラッシュした場合、printステートメントでクラッシュする –

関連する問題