2015-09-03 2 views
0

я успешно получить данные JSON, но я должен бросить, что так, что я могу делать определенную операцию Вот JSONне может бросить JSon данных в быстрой

var jsonResult : NSDictionary! = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &err) as! NSDictionary 

У меня есть один статус объекта, я должен проверить, это 1 или нет поэтому я стараюсь это

if let status : NSNumber! = jsonResult["status"] as? NSNumber { 
    //code 
} 

для этого, но это даст мне за исключением

fatal error: unexpectedly found nil while unwrapping an Optional value 

так что я нашел новое решение

if jsonResult["status"] as! NSObject == 1{ 
//code 
} 

Это не возвращает какой-либо ошибки, но даже JSON имеет этот объект, а также его значение равно 1, но не может пойти к тому, если пункт я думаю, какой-то вопрос в кастинге, но не понял Вот JSON ответ безопасно

{ 
    message = success; 
    status = 1; 
} 
+0

Какой версии стрижа вы используете? 1,2 или 2,0? Есть некоторая разница в обработке ошибок и других вещей. – Marc

+0

версия swift 2.0 –

+0

Вы не используете Swift 2, иначе у вас возникла бы ошибка при использовании «NSJSONSerialization.JSONObjectWithData (данные, опции: NSJSONReadingOptions.MutableContainers, error: & err)» (подпись метода изменена с помощью Swift 2). – Moritz

ответ

1

Использование разворачивания с if let вместо силы разворачивания с !. То же самое для безопасных типажей результата:

if let jsonResult = NSJSONSerialization.JSONObjectWithData(data, options: nil, error: &err) as? NSDictionary { 

    if let statusInt = jsonResult["status"] as? Int { 

     println("Result is an Integer: \(statusInt)") 

     if statusInt == 1 { 

      // ... 

     } 

    } else if let statusString = jsonResult["status"] as? String { 

     println("Result is a String: \(statusString)") 

     if statusString == "1" { 

      // ... 

     } 

    } else { 

     // jsonResult["status"] could not be found 

    } 

} else { 

    // error, couldn't decode JSON 

} 

обновления для Swift 2.0

do { 
    if let jsonResult = try NSJSONSerialization.JSONObjectWithData(data, options: []) as? NSDictionary { 
     if let statusInt = jsonResult["status"] as? Int { 
      print("Result is an Integer: \(statusInt)") 
      if statusInt == 1 { 
       // ... 
      } 
     } else if let statusString = jsonResult["status"] as? String { 
      print("Result is a String: \(statusString)") 
      if statusString == "1" { 
       // ... 
      } 
     } else { 
      // jsonResult["status"] could not be found 
     } 
    } else { 
     // error, couldn't decode JSON 
    } 
} catch let error as NSError { 
    print(error) 
} 
+0

Его работа поблагодарить вас ... –

+0

Добро пожаловать. – Moritz