【发布时间】:2020-06-28 02:12:15
【问题描述】:
我尝试了 swiftUI 教程“处理用户输入”。
https://developer.apple.com/tutorials/swiftui/handling-user-input
使用“For”而不是“For Each”来实现。 但是出现错误“包含控制流语句的闭包不能与函数生成器'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 中是不允许的。 -
为什么要使用
for?ForEach视图的存在正是因为常规的for循环不能在视图构建器函数中使用。但是,对于for循环,您确实无法使用ForEach进行任何操作,因此了解您想要实现的目标将有助于我们回答您的问题。
标签: swift swiftui swiftui-list swiftui-navigationlink swiftui-foreach