【发布时间】:2019-08-20 19:57:05
【问题描述】:
自从今天早些时候更新到 Xcode Beta 6 后,我的应用程序将不再构建,它在 Beta 5 及更早版本中运行良好。
这是包含错误消息的文件中的代码,尽管我现在知道这并不一定意味着这就是错误的实际所在。
import SwiftUI
struct JobView_Table : View {
@ObservedObject var jobList: JobDetailViewModel = JobDetailViewModel()
var body: some View {
NavigationView {
List {
ForEach($jobList.jobDetails) { job in
NavigationLink(destination: JobDetailHost(jobDetails: job)) { // ERROR: "Type of expression is ambiguous without more context"
JobView_List(jobDetails: job)
}
}
}
.navigationBarTitle(Text("My Jobs"))
.onAppear(perform: fetchData)
.onAppear(perform: {
print("Hello!")
})
}
}
private func fetchData() {
return(jobList.updateDetails())
}
}
包含数据的结构正确地符合以下协议。
struct JobDetails: Codable, Identifiable, Equatable, Hashable {
...
...
}
这是向JobView_Table 提供数据的类。
import Foundation
import UIKit
import Combine
class JobDetailViewModel: ObservableObject, Identifiable {
@Published var jobDetails: [JobDetails] = []
func updateDetails() {
self.jobDetails = DataManager().fetchJobList()
}
}
最后是通过NavigationLink链接到的目标视图。
struct JobDetailHost: View {
@Environment(\.editMode) var mode
@Binding var jobDetails: JobDetails
var body: some View {
VStack {
JobDetailView(jobDetails: jobDetails)
}
.navigationBarItems(trailing: EditButton())
}
}
我注意到其他一些人似乎也有类似的问题,即在下面列出的两个问题中,但目前探索这些问题的答案对我没有帮助。 SwiftUI Xcode 11 beta 5 / 6: Type of expression is ambiguous without more context
SwiftUI: Why does ForEach($strings) (text: Binding) not build?
编辑:
我已经尝试实施 Fabian 的建议,这已经消除了错误,但是列表中没有填充任何内容。
这是调整后的List 代码,编译成功但运行应用程序时列表未填充。
List {
ForEach(jobList.jobDetails.indexed(), id: \.1.id) { (index, job) in
NavigationLink(destination: JobDetailHost(jobDetails: self.$jobList.jobDetails[index])) {
Text(job.jobName)
}
}
}
下面不使用ForEach,丢弃NavigationLink,还是不行。
List(jobList.jobDetails.indexed(), id: \.1.id) { (index, job) in
Text(job.jobName)
}
【问题讨论】: