Одиннадцатый HStack (или другой компонент пользовательского интерфейса) создает ошибку компиляции: «Аргумент передан для вызова, который не принимает аргументов» - PullRequest
1 голос
/ 07 ноября 2019

Я создаю приложение с помощью 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», ошибка исчезла.

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

1 Ответ

1 голос
/ 07 ноября 2019

Вам нужно использовать 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 и выше - это не работает.

...