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 няма да използвате параметър за грешка.

Ако функцията goal-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
@EricD. където писах, че бързите грешки са изключения? - 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
@EricD. Първо, просто копирам поставения код от въпроса, за да покажа как трябва да се промени, за да работи правилно. И не виждам къде в отговора ми се казва, че бързите грешки са изключения. Мога също така да копирам произволен ред и да кажа, че ето го. - person Vasyl Khmil; 14.01.2016
comment
@EricD. Също така не съм дефинирал променлива dataValue, така че няма да се компилира. видяхте ли това - person Vasyl Khmil; 14.01.2016
comment
Вижте това. Нищо не съм измислил. Вие написахте това, което е грешно и това казах в първия си коментар. - person Eric Aya; 14.01.2016
comment
Нека продължим тази дискусия в чата. - person Vasyl Khmil; 14.01.2016