我试了一个SwiftUI教程,“处理用户输入”。
https://developer.apple.com/tutorials/swiftui/handling-user-input
我尝试使用for
而不是ForEach
来实现它。
但是出现了一个错误:"Closure containing control flow statement cannot be used with function builder 'ViewBuilder'".
import SwiftUI
struct LandmarkList: View {
@State var showFavoritesOnly = true
var body: some View {
NavigationView{
List{
Toggle(isOn: $showFavoritesOnly){
Text("Show FavatiteOnly")
}
ForEach(landmarkData) { landmark in
if !self.showFavoritesOnly || landmark.isFavorite {
NavigationLink(destination: LandmarkDetail(landmark: landmark)) {
LandmarkRow(landmark: landmark)
}
}
}
}
.navigationBarTitle(Text("Landmarks"))
}
}
}
翻译成中文:
import SwiftUI
struct LandmarkList: View {
@State var showFavoritesOnly = true
var body: some View {
NavigationView{
List{
Toggle(isOn: $showFavoritesOnly){
Text("Show FavatiteOnly")
}
for landmark in landmarkData {
if $showFavoritesOnly || landmark.isFavorite {
NavigationLink(destination: LandmarkDetail(landmark: landmark)){
LandmarkRow(landmark: landmark)}
}
}
}
.navigationBarTitle(Text("Landmarks"))
}
}
}
ForEach
是一个特殊的视图,但for
是控制流语句,在你尝试放置它的 ViewBuilder 中是不被允许的。 - Asperifor
循环?ForEach
视图的存在恰好是因为无法在视图生成器函数中使用常规的for
循环。但是你用for
循环可以做的任何事情都可以用ForEach
完成,所以了解您想要实现什么将有助于我们回答您的问题。 - Jonas Zell