第十一个HStack(或其他UI组件)创建编译错误,“传递给不带参数的调用的参数”

时间:2019-11-07 03:40:33

标签: swiftui swift5

我正在使用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上遇到了一个错误,说“传递给调用的参数不带参数。”

如果我注释掉11个“ HStack”之一,则错误消失了。

我想知道发生了什么事。 谢谢

1 个答案:

答案 0 :(得分: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的精彩文章解释了原因。您可以看到它here

  

这是因为SwiftUI的视图构建系统具有各种代码,旨在让我们添加1个视图,2个视图,3个视图或4、5、6、7、8、9和10个视图,但不能添加11个或更多–那是行不通的。