2016-04-17 21 views
2

enter image description hereDowncast from'String ?!'以'字符串'僅解開可選項;你的意思是使用'!!'嗎?在迅速

源代碼是波紋管

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)") 

我如何解決這個問題

+0

只是使它像這樣'JSON [「profile_image_url」]作爲字符串?' – HardikDG

+0

@Pyro避免使用武力,展開只要有可能,它會導致錯誤和運行時崩潰。 – ColGraff

+0

@ luk2302其工作完美。我有其他問題 讓評論= unwrapResults.items爲! Array 錯誤是模糊使用項目 –

回答

6

你想測試和解開任何Optional然後再使用它們。這包括像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

等等,所以你還在做'如果讓XXX = json [「profile_image_url」]爲?字符串「,就像OP一樣。有什麼不同? –

+1

主要區別在於,我正在處理OP所沒有的那個語句的所有可選的解包和錯誤。一旦代碼到達這一點,一切都應該是有效的,應該不會產生任何問題。 – ColGraff

相關問題