2016-04-01 14 views
0

辞書要素を含むサーバーからJSON応答を受け取りましたが、要素の1つは["abc"、 "def" 、「GHI」]と私は以下のコードに示すように、アレイと呼ばれる変数に、この配列を代入しています:タイプ '__NSCFConstantString'の値を 'NSArray'にキャストできません

self.array = infoDictionary["element1"] as! [String] 

私が直面してる問題は、キーに対してnullを「要素1」はあります包み、私が得るということですエラー:

Could not cast value of type '__NSCFConstantString' to 'NSArray'

この結果、アプリケーションがクラッシュします。 "element1"に対して ""の場合に備えて、アプリケーションをクラッシュから救う方法はありますか?

+0

私の提案:*禁止* 'として'と力アンラップあなたのコードの一般的なのの利用を!。どこでも安全なアンラッピングを使用し、エラーをキャッチし、 'もしlet ...条件 'のために' else'節を作ってください。 – Moritz

+0

私はブロックの外で宣言された変数を持っていますので、私は使えません... – laser2302

+0

間違っています。あなたは常に*安全に展開することができます。 :)もしあなたが 'もし' let 'を使うことができないなら、 'guard let'や他の多くの安全アンラッピング技術を使用してください。 *これらのテクニックを学びます。 :)* – Moritz

答えて

2

エラーメッセージには、element1の値がArrayではなくStringであることが示されています。

その値は、タイプチェックする必要があり、両方のString[String]ことができれば:

if let item = infoDictionary["element1"] { 
    if item is String { 
     print("I'm String") 
    } else if item is [String] { 
     print("I'm Array") 
    } 
} 
+0

それは働いた!どうもありがとう! – laser2302

関連する問題