2016-07-10 6 views
0

私のアプリケーションからサーバーにPOSTリクエストを行い、応答としてjsonStringを取得します。AnyObjectを迅速に文字列に変換しない

:私は関数で辞書に文字列を変換してから、私は、ユーザーがログインしているかどうかを確認したいサーバーからの応答を取得した後

func convertStringToDictionary(text: String) -> [String:AnyObject]? { 
    if let data = text.dataUsingEncoding(NSUTF8StringEncoding) { 
     do { 
      return try NSJSONSerialization.JSONObjectWithData(data, options: []) as? [String:AnyObject] 
     } catch let error as NSError { 
      print(error) 
     } 
    } 
    return nil 
} 

:私はこのようになりますどの辞書に文字列を変換する機能を作りました

 let result = convertStringToDictionary(jsonString as String) 

     if (result!["loggedIn"] == "1") 
     { 
      print("You are logged in!") 
     } 

次に、 "AnyObject型の値を期待される引数文字列に変換できません"というエラーが表示されます。文字列と比較したい場合は、AnyObject型の変数をStringに変換する必要があると思います。私はGoogleで見つけたすべてのオプションを試しましたが、うまく機能しません。

答えて

0

あなたが期待されるタイプがString

if let loggedIn = result?["loggedIn"] as? String where loggedIn == "1" { ... 
+0

あなたの答えは完璧に機能しますが、なぜ==でしかなく、=ではない!= –

+0

あなたのコードには '!='はありません。 – vadian

1

結果はタイプ[String : AnyObject]の辞書ですので、あなたがそれから抽出した値はString==のための有効な演算子オーバーロードを持たない、AnyObject?として入力されます。抽出した値をStringにキャストしてから「1」と比較する必要があります。

あなたはおそらくしたいことのようなものです:あなたがようLOGGEDINキャストしたい

{ 
    "loggedIn" : 1 
} 

:あなたのJSONは次のように整数として「LOGGEDIN」フィールドを持っている場合は、その

if let result = convertStringToDictionary(jsonString as String), 
    loggedIn = result["loggedIn"] as? String 
    where loggedIn == "1" { 
    print("You are logged in") 
} 

注意整数であり、文字列ではありません。

+0

あなたの答えは完璧に動作しているが、なぜそれだけで==としていないと機能しない!= –

+0

@PixAndCodesがどのように動作しないことをコンパイラに指示する必要がありますと!=? –

関連する問題