Если вы обнаруживаете, что достигли AnyView, вы оставили счастливый путь SwiftUI. Есть причина, по которой он указан в разделе редко используемых представлений в документах.
AnyView нарушает многие оптимизации SwiftUI. Он существует в качестве аварийного выхода, когда у вас нет другого выбора.
Ваш код похож на все примеры, которые я до сих пор видел в Apple. @ViewBuilder
имеет смысл, когда ваша цель - создать контейнер для представления, сгенерированного вызывающей стороной, и вы хотите, чтобы вызывающая сторона определяла детали реализации. HStack - хороший пример. Если компонент должен инкапсулировать детали реализации View, то он должен генерировать само представление, используя переданные свойства (что вы и делаете). Таким образом, вопрос в этом случае таков: «Является ли TodoItem общим инструментом, который будет использоваться разными способами многими разными пользователями?» Если нет, я не уверен, почему вы передадите ViewBuilder.
Ваше обновление (удаление AnyView) несколько меняет вопрос. В этом случае все сводится к моему последнему абзацу, приведенному выше: если TodoItem предназначен для создания универсального c контейнера, для которого ожидающие должны предоставлять содержимое, то ViewBuilder хорош. Предполагается, что TodoItem имеет отношение к макету, а не к отображению, как HStack.
Но если это представление о отображении, например Button или Text, то вы должны передать его свойства и позволить ему управлять своими внутренними объектами. (Обратите внимание, что кнопка позволяет передавать вам в Label ViewBuilder, но обычно это не требуется.)
Имя, подобное "TodoItem", очень похоже на последнее; это похоже на пользовательский вид, который должен управлять своим внешним видом. Но главный вопрос: сколько абонентов передают разные Views этому ViewBuilder? Если все вызывающие абоненты передают почти одинаковые представления (или если есть только один вызывающий), то это должны быть свойства (например, кнопка). Если есть много абонентов, которые передают различные виды представлений содержимого, то он должен использовать ViewBuilder (например, HStack).
Ни один из них не является «более SwiftUI». Они решают различные проблемы в SwiftUI.