mso*_*iku 6 swift swiftui swiftui-list swiftui-navigationlink swiftui-foreach
我尝试了 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"))
}
}
}
Run Code Online (Sandbox Code Playgroud)
至(我写道):
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"))
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 18
符合ForEach,View因此从本质上讲,它View就像 a 一样TextField。对于每个关系
你不能使用普通的for-in,因为它ViewBuilder不理解什么是命令式 for 循环。可以ViewBuilder理解其他控制流,例如if,if-else或分别if let使用buildEither(first:)、buildEither(second:)和buildif(_:) 。
尝试注释掉 if 语句,Xcode 可能会向您揭示真正的错误。下面是一个示例:由于传递给我的视图之一的枚举缺少关联值,我收到此错误。
这是之前和之后的样子:
Group {
if let value = valueOrNil {
FooView(
bar: [
.baz(arg1: 0, arg2: 3)
]
)
}
}
Run Code Online (Sandbox Code Playgroud)
Group {
if let value = valueOrNil {
FooView(
bar: [
.baz(arg1: 0, arg2: 3, arg3: 6)
]
)
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6487 次 |
| 最近记录: |