如果这不是一个正确的问题,我深表歉意,因为我对SwiftUI和iOS编程完全陌生。这个问题表明了我想做什么,由于SwiftUI编译器,我所得到的错误是一个红色的鲱鱼。我可能完全采用了错误的方法来完全解决此问题。
我正在使用XCode版本11.2.1(11B500)
使用ObservedObject进行查看:
struct Results: View {
var jobId: String
@ObservedObject var jobDetailService: JobDetailService
init(jobId: String) {
self.jobId = jobId
jobDetailService = JobDetailService(jobId: jobId)
}
var body: some View {
//... view code here
}
}
在此视图中,我收到了错误(在ZStack行)“无法推断通用参数'C0'”。当我注释掉NavigationLink
块时,错误消失了。此外,当Results
视图不依赖于jobId
参数(并且我们与JobDetailService
内联构造@ObservedObject var jobDetailService = JobDetailService()
时,这一切都可行。但是,我需要能够将jobId
参数传递给JobDetailService
以便进行网络调用以获取并发布数据。
struct JobList: View {
@ObservedObject var jobListService = JobListService()
var body: some View {
NavigationView {
List(jobListService.jobs) {job in
ZStack {
JobCard(name: job.fullName, date: job.lastUpdated)
NavigationLink(destination: Results(jobId: job.jobId)) {
EmptyView()
}
}
}
}
}
}
答案 0 :(得分:1)
我认为以下内容可以为您提供帮助:
声明...
struct Results: View {
@ObservedObject var jobDetailService: JobDetailService
var body: some View {
//... view code here
}
}
...和用法
NavigationLink(destination: Results(jobDetailService: JobDetailService(jobId: jobId))) {
EmptyView()
}
答案 1 :(得分:0)
在阅读this article之后,考虑到Asperi关于不仅仅依赖于初始化的建议,我选择执行以下操作:
从JobDetailService
中删除自定义初始化程序,而是在我的Results
视图中实例化该服务。然后,在.onAppear
视图上的Results
方法中,从getJobDetail
调用JobDetailService
方法,这反过来又构成了填充@ObservedObject
的网络调用。这使我可以传递所需的参数并控制何时进行网络调用。也许不是解决此问题的正确模式,但它目前适用于我的用例。