我尝试了一个SwiftUI教程,“处理用户输入”。
https://developer.apple.com/tutorials/swiftui/handling-user-input
我尝试用for
而不是ForEach
来实现它。但是出现了一个错误:“包含控制流语句的闭包不能与函数生成器‘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"))
}
}
}
发布于 2022-03-17 15:27:44
ForEach
向View
确认,所以它的核心是View
,就像TextField
一样。ForEach关系
您不能使用普通的for-in
,因为ViewBuilder
不知道什么是命令式的for-循环。ViewBuilder
可以分别使用buildEither(第一:)、buildEither(第二:)和:)来理解其他控制流,如if
、if-else
或if let
。
发布于 2022-08-25 01:16:28
由于传递给我的视图之一的枚举缺少关联值,所以我得到了这个错误。
下面是它前后的样子:
在此之前
Group {
if let value = valueOrNil {
FooView(
bar: [
.baz(arg1: 0, arg2: 3)
]
)
}
}
之后
Group {
if let value = valueOrNil {
FooView(
bar: [
.baz(arg1: 0, arg2: 3, arg3: 6)
]
)
}
}
https://stackoverflow.com/questions/62617491
复制相似问题