-1

アプリからサーバーに POST リクエストを送信すると、レスポンスとして jsonString が返されます。次のような文字列を辞書に変換する関数を作成しました。

    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 の変数を文字列に変換する必要があると思います。Google で見つけたすべてのオプションを試しましたが、うまくいきませんでした。

4

2 に答える 2

1

result は type のディクショナリであるため[String : AnyObject]、そこから抽出する値は as として型指定されAnyObject?ます。抽出された値を「1」と比較する前に、キャストする必要があります。==StringString

おそらくあなたが望むのは次のようなものです:

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

JSON に「loggedIn」フィールドが整数として含まれている場合、次のように注意してください。

{
    "loggedIn" : 1
}

LoggedIn を String ではなく Integer としてキャストする必要があります。

于 2016-07-10T21:20:22.170 に答える
0

期待される型がString

if let loggedIn = result?["loggedIn"] as? String where loggedIn == "1" { ...
于 2016-07-10T21:20:29.290 に答える