2016-12-04 5 views
1

Facebook Graph SDKを使用してユーザープロファイルからスコア値を抽出しようとしています。私は簡単にパラメータを設定し、サーバーからオブジェクトを取得することができます。しかし、私は正確な特定のスコア値に達するのが難しいです。私のアプリはゲームです。すぐにFacebook SDKからJSONを解析する際にスコア値を取得する方法

これは私が使用しているもので、結果の出力はさらに低下します。

let retrieveScores = FBSDKGraphRequest.init(graphPath: "/me/scores", parameters: ["fields": "score"], httpMethod: "GET").start { (connection, result, error) in 

     if(error != nil){ 
      print(error) 
      return 
     } 

     print(result) 

     // Need help right here. 
     let dict = result as! [String : Any] 
     let myArray = (dict["data"] as! NSArray).mutableCopy() as! NSMutableArray 
} 

この

はprint文がデバッガ出力で示したものですので、私は、サーバーから受信するもの:

{ 
    data =  (
      { 
     score = 1230; 
     user =    { 
      id = 1028084234; 
      name = "John Appleseed"; 
     }; 
    } 
); 
} 

私はスコアにアクセスすることができないよう、内部のこのDictionaryですDictionary?私はこれまで多くの答えを試してきましたが、誰も助けてくれないようです。また、それらの大部分はObjective Cにありますので、それはもう一つの反触媒です。

また、myArrayを宣言するコードの最後の行は、最初に{data =が出力されます。

ありがとうございました。

答えて

1

をごdataキーはDictionaryArrayが含まれています。 scoreは実際にはdata配列の最初のオブジェクトの内側にあるため、data配列の最初のオブジェクトにアクセスする必要があります。 ArrayDictionaryを使用すると、SwiftでJSON応答にアクセスするのは実際には非常に簡単です。

+0

ありがとう、これは完全に働いた。質問、 '[[String:Any]]'とはどういう意味ですか? 2つの括弧は何のために使われていますか? – Munib

+0

@ return0 Welcomeメイト:) –

+1

@ return0ここで '[String:Any]'は大括弧で囲まれた単一の角括弧を持ち、二重大括弧 '[[String:Any]]'は辞書の配列として表します。 –

1

このような方法で結果を安全に解析できます。最初にデータ辞書を解析し、その中のスコア値を取得します。生のJSON文字列値としてスコアを持っている場合は、as? Intウィットas? String置き換える:

if let dataDict = dict["data"] as? [String: AnyObject] { 
    if let score = dataDict["score"] as? Int { 
    //use score 
    } 
} 
+0

これは機能しません。 – Munib

+0

スコアには何が返されますか? –

+0

何もせず、if文を渡すことはありません。上記のNiravの答えはうまく動作します。 – Munib

関連する問題