NSJSONSerialization Дополнительный аргумент в учебнике «ошибка» IOS 8 SDK Development 2nd Edition

Из книги IOS 8 SDK Development 2nd Edition Криса Адамсона в конце главы 6.

У меня проблема с вызовом ошибки и тем, как именно я конвертирую его из старого Swift в новый Swift с помощью do.. и попробуйте вот мой блок кода.

func handleTwitterData (data: NSData!, urlResponse: NSHTTPURLResponse!, error: NSError!) {
    if let dataValue = data {
        var parseError : NSError? = nil
        let jsonObject : AnyObject? =  NSJSONSerialization.JSONObjectWithData(dataValue, options: NSJSONReadingOptions(0), error: &parseError)
        print("JSON error: \(parseError)\nJSON response: \(jsonObject)")
} else {
    print("handleTwitterData received no data")
    }
}

person Zakaria A. Ahmed    schedule 14.01.2016    source источник


Ответы (1)


В Swift 2.0 вы не будете использовать параметр ошибки.

Если функция target-c имеет последний параметр как NSError**, swift 2.0 удалит его и пометит как функцию, которая может генерировать исключение.

Таким образом, вам не нужно писать этот параметр, вместо этого вам нужно использовать синтаксис быстрых исключений.

do {
    let jsonObject : AnyObject? = try NSJSONSerialization.JSONObjectWithData(dataValue, options: NSJSONReadingOptions(0))
} catch {
    print("\(error)")
}
person Vasyl Khmil    schedule 14.01.2016
comment
Ошибки Swift не являются исключением. В любом случае, на этот вопрос уже есть много хороших ответов. - person Eric Aya; 14.01.2016
comment
@ЭрикД. где я написал, что быстрые ошибки являются исключениями? - person Vasyl Khmil; 14.01.2016
comment
В вашем ответе дважды: function that can throw exception и but need to use swift exceptions syntax instead - person Eric Aya; 14.01.2016
comment
@ЭрикД. Прежде всего, я просто копирую вставленный код из вопроса, чтобы показать, как его нужно изменить, чтобы он работал правильно. И я не вижу, где в моем ответе говорится, что быстрые ошибки являются исключениями. Я также могу скопировать какую-нибудь случайную строку и сказать, что вот она. - person Vasyl Khmil; 14.01.2016
comment
@ЭрикД. Также я не определил переменную dataValue, поэтому она не будет компилироваться. Вы это видели? - person Vasyl Khmil; 14.01.2016
comment
Посмотрите на это. Я ничего не изобретал. Вы написали это, что неверно, и это то, о чем я говорил в своем первом комментарии. - person Eric Aya; 14.01.2016
comment
Давайте продолжим обсуждение в чате. - person Vasyl Khmil; 14.01.2016