2016-04-17 3 views
2

enter image description here'String ?!'のダウンキャストto 'String'はオプションをアンラップするだけです。 「!!」を使用することを意味しましたか?迅速に

ソースコードは、私が

+0

単なる文字列としてこの 'JSON [「profile_image_url」]のようにそれを作る?' – HardikDG

+0

可能な限り力-アンラップを避け@Pyro、それはバグや実行時のクラッシュにつながります。 – ColGraff

+0

@ luk2302その仕事は完璧です。私は他の問題があります コメント= unwrapResults.itemsとして!配列 エラーは、項目のあいまいな使用です。 –

答えて

6

はあなたがテストし、あなたがそれらを使用する前に、任意のOptionalをアンラップしたいこの問題を解決する方法を

let json = try NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments) 
         if let blogs = json["profile_image_url"] as? String { 

          userImage = blogs//json["profile_image_url"] as! String 
          print("USER IMAGE:\(userImage)") 

怒鳴るです。これには、as?のようなキャストが含まれます。これを避けることができる場合は、予期しない実行時のクラッシュを引き起こすため、強制アンラッピングまたは明示的にアンラップされたOptional!とマークされています)を使用しないでください。

import Foundation 

// create test data 
let testJson = ["profile_image_url": "http://some.site.com/"] 
var data: NSData? 

// convert to NSData as JSON 
do { 
    data = try NSJSONSerialization.dataWithJSONObject(testJson, options: []) 
} catch let error as NSError { 
    print(error) 
} 

// decode NSData 
do { 
    // test and unwrap data 
    if let data = data { 
    let json = try NSJSONSerialization.JSONObjectWithData(data, options: .AllowFragments) 
    // test and unwrap cast to String 
    if let userImage = json["profile_image_url"] as? String { 
     print("USER IMAGE:\(userImage)") 
    } 
    } 
} catch let error as NSError { 
    print(error) 
} 
+1

待つようにして、もし 'let XXX = json [" profile_image_url "]を?文字列 '、OPのように。違いは何ですか? –

+1

主な相違点は、私は、オプションではなかったすべてのオプションのアンラッピングとエラーを処理していることです。コードがそのポイントに達すると、すべてが有効でなければならず、問題は発生しません。 – ColGraff

関連する問題