为什么SwiftUI讨厌控制流?

问题描述 投票:-3回答:1

为什么SwiftUI喜欢抛出类似错误

包含控制流语句的封闭不能与函数生成器'ViewBuilder'一起使用

[当我只是尝试类似的东西时

VStack {
    for i in 0...10 {
        Text("Hello, world!")
    }
}

它不会编译吗?为什么要迅速护理? SwiftUI框架如何甚至检测是否存在控制流语句并引发错误?我喜欢C这么简单。

swift for-loop while-loop swiftui control-flow
1个回答
1
投票

SwiftUI框架甚至如何检测是否存在控制流语句并引发错误?

不是。 Swift language(即compiler)检测到此情况。这不是“抛出错误”,而是说您的代码在语法上无效,因此无法对其进行编译。

要知道为什么,问问自己语法是什么

VStack {
    // ...
}

它是由function builder介导的VStack结构的初始化程序,它从根本上改变了Swift语法的工作方式,将其转变为特定领域的语言。您正在调用此方法:

https://developer.apple.com/documentation/swiftui/vstack/3278367-init

花括号中的东西是最后一个参数:

@ViewBuilder content: () -> Content

因此,这是一个必须返回Content的函数的函数体,Content是一种View。由于函数构建器的工作方式,您唯一可以做的就是返回一个View;或者,感谢函数构建器,您可以说出一系列View对象,它们将为您组合并返回。这就是all,您可以在这种情况下这样做。

您的用例正是提供ForEach结构的原因:这样您就可以在函数生成器的域内循环生成View对象。

© www.soinside.com 2019 - 2024. All rights reserved.