Как определить, из какого блока выходит охранник?

Когда guard не выполняется условие, они выходят из закрытия. Однако, что смущает меня из того, что считается блоком, из которого выходит охранник?

Например, если у меня есть следующее:

func doThing() {
  while ... {
    for ... {
      if ... {
        guard ... else { return }
      }
    }
  }
}

Ли guard выйти только if, for, whileили весь func?

Каково действительное правило, потому что я прочитал block а также closure Термины, используемые взаимозаменяемо при определении того, что guard выходит из, но каждый термин подразумевает вещи по-своему.

1 ответ

Решение

return оператор, используемый для выхода из ближайшего замыкания (функция в вашем случае) со значением результата (Void по умолчанию), независимо от того, насколько глубоко вы находитесь в циклах или if условия. Возможно, вы перепутали return с break,

Тем не менее, вы также можете использовать break, continue или же throw заявление в else пункт о guard заявление. Если вы используете break оператор, например, вы заканчиваете выполнение ближайшего цикла или switch заявление, или, если вы отметите цикл / if / switch по ярлыку и использованию break затем с этой меткой вы выходите с помеченным заявлением.

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