guard let json = try? NSJSONSerialization.JSONObjectWithData(data!,
options: []) as? [String: AnyObject] else {
print("Nil data received from fetchAllRooms service")
return
}
В приведенном выше коде я не могу понять, каково значение
"попробовать?": Является ли "попробовать?" здесь означает, что весь код после попытки будет находиться в блоке попытки (так же, как попытка поймать, как на другом языке?)
"в виде?" : Думаю, это для приведения типов. но почему это "?", после того как?
Как я могу заменить приведенный выше код на if-let?
try?
возвращает необязательное значение, которое равноnil
, если произошла какая-либо ошибка, но не определяет, что это была за ошибка. Итак, если вас не волнует, почему это не удалось,if let foo = try? ... { .... }
(или версияguard
) является краткой альтернативой более громоздкому шаблонуdo
-catch
. Используя синтаксисas?
, вы также надежно проверяете не только отсутствие ошибок, но и то, что результат соответствует ожидаемому типу. Очевидно, что если вам нужно знать, почему это не удалось, шаблонdo
-try
-catch
необходим. Что касаетсяif let
иguard let
, см. ответы под повторяющимся вопросом. - person Rob   schedule 26.12.2016