Одиннадцатый HStack (или другой компонент пользовательского интерфейса) создает ошибку компиляции, аргумент передается в вызов, который не принимает аргументов

Я создаю приложение с SwiftUI (Swift 5.1, XCode 11.2 (11B52), MacOS Catalina 10.15.1). Когда я добавлял компоненты в представление, в какой-то момент я получал ошибку. Чтобы определить причину, я упростил код, например:

import SwiftUI

struct MainView: View {
    var body: some View {
        VStack {
            HStack {
                Text("Okay")
            }
            HStack {
                Text("Okay")
            }
            HStack {
                Text("Okay")
            }
            HStack {
                Text("Okay")
            }
            HStack {
                Text("Okay")
            }
            HStack {
                Text("Okay")
            }
            HStack {
                Text("Okay")
            }
            HStack {
                Text("Okay")
            }
            HStack {
                Text("Okay")
            }
            HStack {
                Text("Okay")
            }
            HStack {
                Text("Okay")
            }
        }
    }
}

struct MainView_Previews: PreviewProvider {
    static var previews: some View {
        MainView()
    }
}

Затем я получил ошибку в первом HStack, в котором говорится: «Аргумент передан вызову, который не принимает аргументов».

Если я закомментирую один из одиннадцати «HStack», ошибка исчезнет.

Я хотел бы знать, что происходит. Спасибо,


person Takatomo    schedule 07.11.2019    source источник


Ответы (1)


Вам нужно использовать Group { ... }.

SwiftUI имеет ограничение в десять элементов на одно представление. Вы можете обойти это, используя Group Итак, если вам нужно больше предметов. Вы группируете их вместе. У вас может быть только 10 групп на представление из-за ограничения в 10 элементов, но вы также можете просто поместить их в Group. Хотя, если вы переходите к вложенным группам, возможно, лучше провести рефакторинг вашего кода и написать его другим способом, используя ForEach или сделав код более компонентным.

struct MainView: View {
    var body: some View {
        VStack {
            Group {
                HStack {
                    Text("Okay")
                }
                HStack {
                    Text("Okay")
                }
                HStack {
                    Text("Okay")
                }
                HStack {
                    Text("Okay")
                }
                HStack {
                    Text("Okay")
                }
                HStack {
                    Text("Okay")
                }
                HStack {
                    Text("Okay")
                }
                HStack {
                    Text("Okay")
                }
                HStack {
                    Text("Okay")
                }
                HStack {
                    Text("Okay")
                }
            }
            HStack {
                Text("Okay")
            }
        }
    }
}

У HackingwithSwift есть фантастическая статья, объясняющая, почему. Вы можете увидеть его здесь

Это связано с тем, что система построения представлений SwiftUI имеет различный код, позволяющий нам добавлять 1 представление, 2 представления, 3 представления или 4, 5, 6, 7, 8, 9 и 10 представлений, но не для 11 и более - это не так. не работает.

person Andrew    schedule 07.11.2019
comment
Я ценю твой ответ! Добавление группы {} сработало! Это действительно сложно ... - person Takatomo; 07.11.2019