2016-07-01 6 views
0

первое сообщение здесь!SWIFT: Разбор объекта JSON

Я работаю над своим собственным приложением погоды (я ученик средней школы, который самообучающийся Swift, но уже имеет опыт работы на Java).

Я учусь, как использовать API, чтобы собрать информацию для использования в моем приложении, и я использую это видео: https://www.youtube.com/watch?v=r-LZs0De7_U

Примерно в 11:38 знака, создается объект JSON:

var jsonError: NSError 
    let json = NSJSONSerialization.JSONObjectWithData(weatherData, options: nil, error: &jsonError) as NSDictionary 

    if let name = json["name"] as? String { 
     cityNameLabel.text = name 
    } 

    if let main = json["main"] as? NSDictionary { 
     if let temp = main["temp"] as? Double { 
      cityTemperatureLabel.text = String(format: "%.1f", arguments: temp) 
     } 

В принципе, я хочу разобрать String из объекта JSON и сохранить в UILabel String.

Однако вторая строка кода дает мне сообщение об ошибке: «NSError не идентичен NSError?» и я не мог найти решение этой ошибки, так что я избавилась от первых двух линий и заменили их:

var jsonError : NSError? 

    let json: AnyObject? = NSJSONSerialization.JSONObjectWithData(weatherData, options: nil, error: &jsonError) 


    if let error = jsonError{ 
     println("error occurred: \(error.localizedDescription)") 
    } 
    else if let jsonDict = json as? NSDictionary{ 
     println("json is dictionary \(jsonDict)") 
    } 
    else if let jsonArray = json as? NSArray{ 
     println("json is an array: \(jsonArray)") 
    } 

Это избавившись от ошибок, но остальная часть кода не будет работать больше , Любые возможные решения + объяснения? Я все еще новичок в API/JSON, так что извиняюсь, если я не очень хорошо объясню свою проблему. Видео должно быть в состоянии помочь вам, ребята, помочь мне!

EDIT: Видимо, я использую Swift версии 1.2

+0

var jsonError: NSError? = nil – Dershowitz123

+0

@ Dershowitz123 Можете ли вы уточнить? –

+0

Измените свою первую строку на то, как я показал. Скажите, если это сработает! – Dershowitz123

ответ

0

Добро пожаловать. Похоже, у вас есть старый код Swift, который больше не действителен. Это, надеюсь, будет работать.

var json: AnyObject? 

    do { 
     try json = NSJSONSerialization.JSONObjectWithData(weatherData, options: []) 
    } catch { 
     print("Error") 
    } 

    if let name = json["name"] as? String { 
     cityNameLabel.text = name 
    } 

    if let main = json["main"] as? NSDictionary { 
     if let temp = main["temp"] as? Double { 
      cityTemperatureLabel.text = String(format: "%.1f", arguments: temp) 
     } 
    } 
+0

Спасибо за ответ. Я скопировал код, но я все еще получаю ошибки, т. е. «последовательные операторы должны быть разделены символом«; »(для оператора try), который, похоже, не имеет смысла ... и улов дает мне ошибку, говоря, что «вычисленное свойство должно иметь явный тип», если операторы let также дают мне «не удалось найти перегрузку для« индекса », который принимает предоставленные аргументы« –

+0

@JustinHu ' Я все еще получаю ошибки. Потому что этот код для Swift 2, и вы используете Swift 1. – Moritz

+0

эй, я просто обновил Swift и начал y сказать, что ваш код работает! Thanks man –