2016-09-27 9 views
1

私のプロジェクトをswift 3.0にアップグレードしていますが、userInfo ["aps"]にエラーが表示されています。 NSString(私はそれの間に疑問符と説明ポイントを入れて試してみましたが、運が文字列リテラルとNSObject添字タイプのサブスクリプトへのあいまいな参照

private func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) { 

     if let aps = userInfo["aps"] as? NSDictionary { 
      if let alert = aps["alert"] as? NSDictionary { 
       if let message = alert["message"] as? NSString { 
        //Do stuff 
       } 
      } else if let alert = aps["alert"] as? NSString { 
       //Do stuff 
      } 
     } 


    } 
+0

は常にエラー・メッセージの正確なテキストを含みます。 – BaseZen

答えて

2

いつものように、はスウィフトコレクション型を使用し、財団のコレクション型は、その内容についていかなる種類の情報を提供していません。 。

まず、デリゲートメソッドの実際のシグネチャを使用し、そのメソッドをプライベートとしてマークし、古いシグネチャを悪意のあるコードにします。ただし、このメソッドは推奨されなくなりました。

func application(_ application: UIApplication, didReceiveRemoteNotification 
         userInfo: [AnyHashable : Any]) 

JSONコレクション型は常に[String:Any](辞書)または[[String:Any]](アレイ)

func application(_ application: UIApplication, didReceiveRemoteNotification 
         userInfo: [AnyHashable : Any]) 

    if let aps = userInfo["aps"] as? [String:Any] { 
     if let alert = aps["alert"] as? [String:Any] { 
      if let message = alert["message"] as? String { 
       //Do stuff 
      } 
     } else if let alert = aps["alert"] as? String { 
      //Do stuff 
     } 
    } 
} 
-1

スウィフト3は、もはや自動的にObjective-Cの参照型に値型(String、それは「APS」の一種である)を橋渡ししません、あなたの辞書の必要な型NSObjectキーの子孫)

だから、あなたが行う必要があります。

userInfo["aps" as NSString]

はまた、自分自身にいくつかのトラブルの時間を節約するかもしれませんこのブリッジング技術を繰り返すAVING:可能な限り迅速にネイティブ・スウィフトフォームに残りの部分を取得:

if let aps = userInfo["aps" as NSString] as? [String: AnyObject] { 
    if let alert = aps["alert"] as? [String: String], message = alert["message"] { 
     // message is now a Swift String 
    } 
    else if let alert = aps["alert"] as? String { 
     // alert is now a Swift String 
    } 
} 
+1

Swift 3の文字列をNSStringに橋渡しするという提案はかなり悪いです。 Swift 3では、AnyObject' - > 'Any'と' [NSObject:AnyObject] ' - >' [AnyHashable:Any] 'の重要な変更について考えてみましょう – vadian

関連する問題