私はFacebookのSDKグラフリクエストを作成してユーザーの好きなものを得ることができますが、返された値を取得してキーの1つを文字列の配列に格納することに問題があります。要求はキー/値のNSDictionaryを返します。次に、objectForKey
を使用して、私が望むものを返すdata
キーを得ることができます:Facebookの "好きな"ページのIDと名前。下付き文字のあいまいな使用ですか?
データは次のように要素を返します。
{
id = 486379781543416;
name = "Star Wars Movies";
},
私は特に、これらのオブジェクトのすべての唯一の「名前」をしたいと配列[String]
にそれらをスローします。私はオブジェクトをループしようとしましたが、エラーが発生していますambiguous use of subscript
。
request.startWithCompletionHandler{(connection:FBSDKGraphRequestConnection!, result:AnyObject!, error:NSError!) -> Void in
let resultdict = result as! NSDictionary
let likes = resultdict.objectForKey("data") as! NSArray
print("Found \(likes.count) likes")
print(likes)
for object in likes{
let name = object["name"] as! String //error: ambiguous use of subsript
print(name)
}
}
それはNSArrayのである問題のように見えるいくつかの研究を行った後とすることを私が代わりにスウィフトのデータ型を使用する必要があります。ここでは、関連するコードです。私はそれをSwift配列にキャストしようとしましたが、違うエラーがあります。
このエラーを処理する最適な方法は何ですか?
ありがとうございます!
更新:ここではどのようなFacebookのAPIリクエストが返すです:可能な限り、あなたは常にNSArray
とNSDictionary
としてネイティブスウィフトコレクション型を使用する必要があります
{
data = (
{
id = 111276025563005;
name = "Star Wars (film)";
},
{
id = 115061321839188;
name = "Return of the Jedi";
}
);
paging = {
cursors = {
after = MTE1MDYxMzIxODM5MTg4;
before = Mjc0NzYzODk2MTg4NjY5;
};
next = "https://graph.facebook.com/v2.5/10155262562690368/likes?access_token=<redacted>";
};
}
詳細情報(私がこのサイトで受け取った可能性のある最も詳細で徹底的な説明)がありがとうございました。私はあなたがこれでやっているところを理解し始めています(私はまだ比較的新しいです)が、resultDictは 'guard let resultDict = result as? [String:[[String:AnyObject]]] else {return} '。私は各行に折り返し点を置き、一度その行に当たると、残りのコードは実行されません。あなたが構造体を見ることができるように、FBSDK要求の出力全体を使って質問を更新します。 – winston
@jamesああ、 'results'辞書の値は定数型ではありません。 。基本的には2回キャストする必要があります。 'results'を '[String:AnyObject]'に渡し、 ''データ ''値を取得したら、 '' AnyObject'から '[[String:AnyObject]]'にキャストできます。 – Hamish
あなたの更新された答えが働いた!助けてくれてありがとう。私は間違いなく何が起こっているのか理解するためにこれを読んでいく必要があります(私はキャスティングで少し失われることを認めます)。私はフラットマップについても知らなかった。非常に便利!あなたはブログ/ウェブサイトを持っていますか?私はあなたからスウィフトを学び続けるのが大好きです。再度、感謝します! – winston