我正在尝试遵循此聊天应用程序教程,并且ForEach函数的语法已在SwiftUI中更新。您能帮我使用SwiftUI成功编译此列表吗?
path = "C://Program Files//Microsoft SQL Server//Client
SDK//ODBC//130//Tools//Binn//" #make sure to use forward slash
program = "bcp.exe"
os.chdir(path)
os.system(program)
我尝试将ForEach更改为更新的语法:
import SwiftUI
struct ChatMessage : Hashable {
var message: String
var avatar: String
}
struct ContentView : View {
var messages = [
ChatMessage(message: "Hello world", avatar: "A"),
ChatMessage(message: "Hi", avatar: "B")
]
var body: some View {
List {
ForEach(messages.identified(by: \.self)) {
Text($0.avatar)
Text($0.message)
}
}
}
}
但是,我收到一条错误消息: “无法推断复杂的闭包返回类型;添加显式类型以消除歧义”
答案 0 :(得分:2)
@dfd已经在上面的评论中回答了您。这里的问题与bind()
视图无关(请注意以下重要事项: ForEach
不是函数,是ForEach
,它是完全不同的从View
开始,您在Swift中就已经习惯了)。
forEach
视图一个接一个地获取数组中的元素,并为每个元素构建一个视图。在ForEach
闭包中(在@ViewBuilder
之后的闭包中),您传递了多个视图。您必须根据需要将两个ForEach
包装在一个视图中。例如,如果要垂直堆叠文本,则必须执行以下操作:
Text
答案 1 :(得分:-1)
struct ContentView: View {
@State var showFavoritesOnly = true
var body: some View {
NavigationView {
List {
ForEach(landmarkData) { landmark in
if !self.showFavoritesOnly || landmark.isFavorite {
NavigationLink(destination: UserDetail(landmark: landmark)) {
UsersList(landmark: landmark)
}
}
}
}
.navigationBarTitle(Text("Users"))
}
}
}