2016-11-17 12 views
0

私は、SWIFT 3に通知からデータを取得しようと、このチュートリアルを使用しています:Developing Push Notifications for iOS 10残念ながら、私は次のエラーを取得する:スウィフト3取得通知データ

private func getAlert(notification: [NSObject:AnyObject]) -> (String, String) { 
    let aps = notification["aps"] as? [String:AnyObject] 
    let alert = aps["alert"] as? [String:AnyObject] 
    let title = alert?["title"] as? String 
    let body = alert?["body"] as? String 
    return (title ?? "-", body ?? "-") 
} 

enter image description here

+0

[これらの](http://stackoverflow.com/search?q=Ambiguous+reference+to+member+subscript)投稿をチェックしましたか? – Eeshwar

+0

@Eeshwarはいそれらの多くはチェックされていて、いずれも機能していません –

+0

あなたのコードを画像ではなく実際のコードとして投稿してください。 – rmaddy

答えて

2

問題のキーを持つ辞書として、notificationが宣言されています。しかし、あなたはタイプStringのキーでその辞書にアクセスしようとします。 StringNSObjectではありません。 1つの解決策は、StringNSStringにキャストすることです。

次の行に修正された別のエラーが表示されます。だからあなたのコードは次のように終わる:

private func getAlert(notification: [NSObject:AnyObject]) -> (String, String) { 
    let aps = notification["aps" as NSString] as? [String:AnyObject] 
    let alert = aps?["alert"] as? [String:AnyObject] 
    let title = alert?["title"] as? String 
    let body = alert?["body"] as? String 
    return (title ?? "-", body ?? "-") 
} 

ことのすべてを言って、そのチュートリアルはミスをたくさん持っているし、多くの場所で間違ったパラメータの型を使用しています。このgetAlertメソッドはNSObjectを使用すべきではありません。 Stringである必要があります。

+0

Swift 3の通知 'userInfo'ディクショナリは' [AnyHashable:Any] 'です。標準JSONディクショナリは'[String:Any]'。 OPは古いタイプを使用すべきではありません。 @vadian合意。 – vadian

+0

だからこそ私の答えで最後の声明を出したのです。このチュートリアルには多くの問題があり、間違ったデータ型が全面的に伝播します。私の答えの大部分は、現在のコードのエラーの原因を直接扱い、その特定の問題に対する1つの解決策を提案しました。もちろん、私が最後に述べたように、正しい解決方法は正しいタイプを使用することです。 – rmaddy

関連する問題