2016-03-23 8 views
0

Xcode 7.3、Swift 2.2にアップグレードした後。コードでSwift 2.2でエラーを表示し続けるが、正常に構築できる

func handleInfo(info: [NSObject: AnyObject]) { 
    let aps = info["aps"] 
    if let message = aps!["alert"] as? String { 
     ..... 
    } 
} 

それは、この行のエラーを示し続ける:

if let message = aps!["alert"] as? String 

(Downcast from 'String?!' to 'Sting' only unwraps optionals; did you meant to use '!!'?)

しかし、私がビルドして実行すれば、それはどんな問題なく正常に実行されます。 しかし、それは私がコーディングするときに表示され続けることはかなり迷惑です。

とにかくそれを修正しますか?

答えて

1

を抑制すべきである私は最終的にこれらのエラーを取り除く方法を見つけ出します。 Swift 2.2では、データ型に対してより厳密な規則が適用されます。

辞書にもkeyの値がある場合は、その辞書のデータ型を指定する必要があります。

ので、もともと、私たちはコードがあります:スウィフト2.2で今

func handleInfo(info: [NSObject: AnyObject]) { 
    let aps = info["aps"] 
    if let message = aps!["alert"] as? String { 
     ..... 
    } 
} 

それは次のようになります。

func handleInfo(info: [NSObject: AnyObject]) { 
    let aps = info["aps"] as! [String: AnyObject] 
    if let message = aps!["alert"] as? String { 
     ..... 
    } 
} 

次にラインに示すエラーが消えてしまいます。

0

ビルドフォルダと派生データをクリーニングしてみてください。それでも解決しない場合は、あなたの変数をアンラップまたはオプションのチェーンを使用すると、警告に

if let aps = info["aps"] { 
    if let message = aps["alert"] as? String { 
     // ... 
    } 
} 

または

guard let message = info["aps"]?["alert"] as? String else { 
    return 
} 
// ... 
1
func handleInfo(info: [NSObject: AnyObject]) { 
    guard let aps = info["aps"] as? [String: AnyObject], 
     message = aps["alert"] as? String else { 
      return 
    } 

    // do something with message 
} 
+0

let message = aps ["alert"]のように単純にコードすると、私が欲しいソリューションではありません!文字列、それはまだエラーを表示します。 –

+0

このソリューションに問題がありますか? –

関連する問題