나는 일반적으로 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
}
}
그리고이보기 내에서 "일반 매개 변수 'C0'을 추론 할 수 없습니다."라는 오류가 발생합니다 (ZStack 라인에서). 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()
}
}
}
}
}
}
이 기사를 읽고 초기화에만 의존하지 않는 Asperi의 조언에 대해 생각한 후 다음을 선택했습니다.
JobDetailService
내 Results
뷰 에서 사용자 지정 이니셜 라이저를 제거 하고 대신 서비스를 인스턴스화합니다 . 그런 다음에 .onAppear
온 방법 Results
보기 통화 getJobDetail
에서 방법을 JobDetailService
차례로 웁니다 네트워크 호출을 만드는을 @ObservedObject
. 이를 통해 필요한 매개 변수를 전달하고 네트워크 호출이 이루어질 때 제어 할 수 있습니다. 이 문제에 대한 올바른 패턴이 아닐 수도 있지만 지금은 내 사용 사례에서 작동합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다