Ключевое слово guard
великолепно, и я использую его с тех пор, как вышел Swift 2. Я смог успешно использовать его во многих сценариях, включая этот:
for viewController in self.navigationController!.viewControllers {
guard let myCustomVC = viewController as? MyCustomViewController else {continue}
myCustomVC.doWhatItHasToDo()
break
}
Работает как шарм. Перебирает все viewControllers
в текущем navigationController
, пока не найдет тот, который мне нужен.
Проблема в следующем: теперь мне нужно обновить приведенный выше код, чтобы повторно использовать переменную myCustomVC
за пределами области for..in
. Это должно быть так же просто, как объявить переменную перед областью действия, но я не могу найти способ guard
присвоения переменной без ключевых слов let
или var
.
Следующий гипотетический код демонстрирует, чего я пытаюсь достичь, но Swift не позволяет мне этого сделать:
var myCustomVC: MyCustomViewController
for viewController in self.navigationController!.viewControllers {
guard myCustomVC = viewController as? MyCustomViewController else {continue}
myCustomVC.doWhatItHasToDo()
break
}
// Now myCustomVC is available outside the for...in scope
myCustomVC.doWhatever()
Xcode предлагает использовать ==
вместо =
, так как ожидает, что оператор guard
будет логическим контекстом, а не назначением переменной.
Любые идеи о том, как обойти эту проблему?