Как выйти из GUARD снаружи и внутри функции - Swift

В следующем коде я практикую использование GUARD (Книга: OReilly Learning Swift)

guard 2+2 == 4 else {
print("The universe makes no sense")
return // this is mandatory!
}
print("We can continue with our daily lives")

Почему я получаю следующую ошибку кода?

error: return invalid outside of a func

Или GUARD используется только внутри функций?


person Mario Burga    schedule 04.12.2017    source источник


Ответы (2)


Если условие в вашем операторе guard не выполняется, ветвь else должна выйти из текущей области. Как видно из сообщения об ошибке, return можно использовать только внутри функций, но return — не единственный способ выйти из области видимости.

Вы также можете использовать внешние функции throw, а если оператор guard находится в цикле, вы также можете использовать break или continue.

return действует в функциях:

func testGuard(){
    guard 2+2 == 4 else {
        print("The universe makes no sense")
        return // this is mandatory!
    }
    print("We can continue with our daily lives")
}

throw действует и вне функции:

guard 2+2 == 4 else { throw NSError() }

break действует в циклах:

for i in 1..<5 {
    guard i < 5 else {
        break
    }
}
person Dávid Pásztor    schedule 04.12.2017
comment
Отлично! Большое спасибо за обучение! - person Mario Burga; 04.12.2017

Или GUARD используется только внутри функций?

Не обязательно.

Из документация:

Если это условие не выполняется, выполняется код внутри ветки else. Эта ветвь должна передать управление для выхода из блока кода, в котором появляется оператор guard. Это можно сделать с помощью оператора передачи управления, такого как return, break, continue или throw, или вызвать функцию или метод, который не возвращает значение, например fatalError(_:file:line:).

Например, это можно использовать на детской площадке на верхнем уровне.

for i in 0...10 {
    guard i % 2 == 0 else { continue }
    print(i)
}

Сообщение об ошибке на самом деле не связано с guard. Там просто указано, что return нельзя использовать вне функции.

person vadian    schedule 04.12.2017
comment
Я ценю ваш ответ, это очень помогло мне в моем обучении, привет! - person Mario Burga; 04.12.2017