Почему SwiftUI выдает ошибки, когда я пытаюсь использовать поток управления? - PullRequest
0 голосов
/ 29 января 2020

Почему SwiftUI любит выдавать ошибки, такие как

Замыкание, содержащее оператор потока управления, нельзя использовать с конструктором функций 'ViewBuilder'

Когда я просто пытаюсь что-то вроде

VStack {
    for i in 0...10 {
        Text("Hello, world!")
    }
}

Не компилируется. Почему быстрая забота? Как инфраструктура SwiftUI вообще обнаруживает наличие операторов потока управления и выдает ошибки?

1 Ответ

3 голосов
/ 30 января 2020

Как инфраструктура SwiftUI вообще определяет наличие операторов потока и выдает ошибки?

Это не так. Swift language (то есть компилятор ) обнаруживает это. Это не «выдает ошибку», это просто говорит, что ваш код синтаксически недопустим, поэтому он не может скомпилировать его.

Чтобы понять почему, спросите себя, каков синтаксис

VStack {
    // ...
}

Это инициализатор структуры VStack, опосредованный конструктором функций , который в основном меняет способ работы синтаксиса Swift, превращая его в специфичный для домена язык c. Вы вызываете этот метод:

https://developer.apple.com/documentation/swiftui/vstack/3278367-init

В фигурных скобках последний параметр:

@ViewBuilder content: () -> Content

Так что это Тело функции для функции, которая должна возвращать Content, который является видом View. Из-за того, как работает построитель функций, единственное, что вам разрешено делать, это возвращать View - или, благодаря построителю функций, вы можете сказать последовательность объектов View, и они объединяются для вас и возвращаются. И это all , которое вам разрешено делать в этом контексте.

В вашем случае использования именно поэтому предоставляется структура ForEach : так, чтобы у вас был способ для создания ваших объектов View в al oop в домене разработчика функций.

...