Как обратиться к навигационному контроллеру в Swift?

Я создал UINavigationController объект и установить его как окно rootViewController имущество. rootViewController из UINavigationController Объект является классом под названием UINavigationMenuViewController, Если я хочу перейти от UINavigationMenuViewController в UIUserProfileViewController например, я могу использовать:

navigationController!.pushViewController(userProfileVC, animated: true)

так же как

navigationController?.pushViewController(userProfileVC, animated: true)

Эффект кажется одинаковым. Мне интересно, в чем разница. Я предполагаю, что второй способ более безопасен, и в случае, если я забуду встроить UINavigationMenuViewController объект внутри UINavigationControllerприложение не будет аварийно завершено по сравнению с первым случаем. Я думаю, это также называется цепочкой опций, я просто не совсем уверен, так как я все еще изучаю Swift.

Пожалуйста, дайте мне совет.

2 ответа

Решение

В случае сомнений всегда безопаснее отдавать предпочтение необязательному связыванию, а не принудительному развертыванию, по той причине, которую вы упомянули: если переменная равна nil, это приведет к сбою приложения.

Однако в некоторых случаях сбой является хорошим средством отладки. Если для вашего контроллера навигации установлено значение nil, возможно, вы захотите считать это ошибкой разработки, поэтому сбой приложения сделает ошибку более явной.

Кроме того, я рекомендую всегда использовать необязательное связывание и / или необязательное связывание и ограничивать использование принудительного развертывания в случаях, когда:

  • Вы уверены, что необязательный не ноль
  • Вы только что проверили не ноль
  • (как упомянуто выше), вы хотите, чтобы приложение зависало, если необязательным является ноль

В первом случае вы явно разворачиваете навигационный контроллер, так что навигационный контроллер является типом UINavigationMenuViewController и должен существовать (или же аварийно завершить работу). Во втором случае navigationController является необязательным типом и не должен существовать. Если он не существует, конечно, ничего не произойдет, и никакое представление не будет представлено.

Другие вопросы по тегам