Спортивные площадки Swift - отличное место для изучения языка.Несмотря на то, что вы не можете запустить весь код, вы можете поместить несколько частей поддержки вокруг него, чтобы увидеть, что происходит.
oldArray
явно содержит некоторые значения enum
.Из вашего фрагмента видно, что одним из значений является .entry
.Я создал enum
с именем State
для целей исследования и дал ему несколько случаев (entry
, foo
, bar
).
Теперь бросьте свой фрагмент в функцию и дайтеэто oldArray
для работы.Добавьте print
в раздел // Do stuff
, и правда будет раскрыта:
enum State {
case entry
case foo
case bar
}
func test() {
let oldArray: [State] = [.entry, .entry, .bar, .entry, .foo]
do {
oldArray.enumerated().forEach { oldTuple in
guard case .entry = oldTuple.element else {
return
}
// Do stuff
print(oldTuple)
}
}
}
test()
Вывод
(offset: 0, element: __lldb_expr_1.State.entry)
(offset: 1, element: __lldb_expr_1.State.entry)
(offset: 3, element: __lldb_expr_1.State.entry)
Isreturn
эквивалентно break
?
Возвращается из замыкания, если не выполнено условие guard
.
Что такое guard
условие?Некоторое задание ...?
.enumerated
превращает oldArray
в последовательность (offset: Int, element: State)
кортежей.Таким образом, массив примеров становится [(offset: 0, element: .entry), (offset: 1, element: .entry), ...]
.forEach
принимает каждый из этих кортежей по очереди и присваивает его oldTuple
.
guard
использует сопоставление с шаблоном , чтобы убедиться, что значение element
текущего кортежа равно .entry
в противном случае он выходит из замыкания.
Синтаксис немного странный, но он говорит, что для продолжения за пределами этого оператора, element
текущего кортежа должен быть .entry
, иначе return
из замыкания и прекращения обработки этого элемента .
Итак, этот код перебирает массив перечислений и обрабатывает только те, которые .entry
.
ЧтоЧто делает do
?
Ничего, что мы можем видеть из вашего фрагмента.Если вы закомментируете do {
и соответствующий }
, тест все равно сделает то же самое.do
обычно используется с Ошибка при передаче для окружения вызовов, которые могут throw
содержать ошибку.Операторы do
обычно используются с операторами catch
, которые затем отлавливают возникшую ошибку.Сам по себе do { }
просто создает новую область.