Как обратиться к навигационному контроллеру в 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 является необязательным типом и не должен существовать. Если он не существует, конечно, ничего не произойдет, и никакое представление не будет представлено.