SwiftUI Control flow build elements - PullRequest
0 голосов
/ 02 марта 2020

Я недавно начал играть с SwiftUI, и хотя есть и кое-что хорошее, я очень разочарован. Особенно из-за того, что он действительно облегчает создание большого, грязного на вид кода и напоминает мне о XML (или HTML) своего рода структуре. В любом случае, я сталкиваюсь со следующей проблемой, которую нигде не могу найти решения. Мне нужно рисовать определенные прямоугольники (или фигуры) во время выполнения, думать об этом как о создании горизонтальной гистограммы. Поскольку число ректов равно Dynami c, мне нужно сгенерировать это в методе, однако я получаю сообщение об ошибке от компилятора любым методом, который я до сих пор пробовал.

Всякий раз, когда я пытаюсь использовать какой-то тип управления потоком, например 'for' или 'while', чтобы генерировать элементы внутри:

struct ContentView: View {

или:

 var body: some View {

Я либо получаю:

Function declares an opaque return type, but has no return statements in its body from which to infer an underlying type

или

Closure containing control flow statement cannot be used with function builder 'ViewBuilder'

Что будет лучшим подходом для рисования динамических c элементов с помощью SwiftUI. Я видел множество примеров в динамических списках c, хотя Apple это уже освещало в первый день, но ничего такого, что могло бы быть связано с пользовательскими элементами или если вы хотите создать динамически установленное число HStack или Vstack, которые не отформатированы как список.

Спасибо!

1 Ответ

1 голос
/ 02 марта 2020

ViewBuilders - это особые вещи, и вы не можете использовать в них определенные операторы потока управления.

Вы можете вызвать отдельные (private) функции для выполнения соответствующего потока управления и создания соответствующие представления.

См. это сообщение в блоге Джона Санделла о функциях Swift 5.1, которые обеспечивают SwiftUI: https://www.swiftbysundell.com/articles/the-swift-51-features-that-power-swiftuis-api/

...