Guard vs if let

guard let json = try? NSJSONSerialization.JSONObjectWithData(data!,
      options: []) as? [String: AnyObject] else {
        print("Nil data received from fetchAllRooms service")
        return
    }

В приведенном выше коде я не могу понять, каково значение

  1. "попробовать?": Является ли "попробовать?" здесь означает, что весь код после попытки будет находиться в блоке попытки (так же, как попытка поймать, как на другом языке?)

  2. "в виде?" : Думаю, это для приведения типов. но почему это "?", после того как?

Как я могу заменить приведенный выше код на if-let?


person user804417    schedule 26.12.2016    source источник
comment
stackoverflow.com/questions/32256834 /swift-2-0-guard-vs-if-let   -  person Jitendra Modi    schedule 26.12.2016
comment
сначала прочитайте это developer.apple.com/library/ контент/документация/Swift/   -  person EI Captain v2.0    schedule 26.12.2016
comment
try? возвращает необязательное значение, которое равно nil, если произошла какая-либо ошибка, но не определяет, что это была за ошибка. Итак, если вас не волнует, почему это не удалось, if let foo = try? ... { .... } (или версия guard) является краткой альтернативой более громоздкому шаблону do-catch. Используя синтаксис as?, вы также надежно проверяете не только отсутствие ошибок, но и то, что результат соответствует ожидаемому типу. Очевидно, что если вам нужно знать, почему это не удалось, шаблон do-try-catch необходим. Что касается if let и guard let, см. ответы под повторяющимся вопросом.   -  person Rob    schedule 26.12.2016