在SwiftUI列表中添加.onReceive关闭->;奇怪的错误
几个小时来,我一直在用我的头来对付这件事,我开始发疯了。我有一个SwiftUI视图,定义如下:在SwiftUI列表中添加.onReceive关闭->;奇怪的错误,swift,xcode,swiftui,combine,Swift,Xcode,Swiftui,Combine,几个小时来,我一直在用我的头来对付这件事,我开始发疯了。我有一个SwiftUI视图,定义如下: struct ExistingClaims: View { @ObservedObject var viewModel = ExistingClaimsListModel() @EnvironmentObject var newClaim : NewClaimModel var body: some View { NavigationView{ List(viewMo
struct ExistingClaims: View {
@ObservedObject var viewModel = ExistingClaimsListModel()
@EnvironmentObject var newClaim : NewClaimModel
var body: some View {
NavigationView{
List(viewModel.claims) { dataItem in
NavigationLink(destination: ClaimDetails()){
HStack(spacing: 10){
VStack(alignment: .leading, spacing: 3) {
Text(dataItem.subject)
Text(String(dataItem.caseNumber)).font(.subheadline).italic()
}
}
}
}
// Navigation Bar
.navigationBarTitle(Text("Exisitng Claims"), displayMode: .inline)
// Navigation bar button
.navigationBarItems(
leading: Button("Logout") {
self.viewModel.claims = []
UserAccountManager.shared.logout()
},
trailing: NavigationLink(
destination: NewClaim()) {
Image(systemName: "plus")
}
)
}
.onAppear{
print("On Appear firing for ExistingClaims()")
self.viewModel.fetchDataFromSalesforce()
}
}
}
List(viewModel.claims) { dataItem in
NavigationLink(destination: ClaimDetails()){
HStack(spacing: 10){
VStack(alignment: .leading, spacing: 3) {
Text(dataItem.subject)
Text(String(dataItem.caseNumber)).font(.subheadline).italic()
}
}
}
}.onReceive(self.newClaim.complete){ data in
print(data)
}
这一切都很好。直到我尝试将.onReceive子句添加到列表中,如下所示:
struct ExistingClaims: View {
@ObservedObject var viewModel = ExistingClaimsListModel()
@EnvironmentObject var newClaim : NewClaimModel
var body: some View {
NavigationView{
List(viewModel.claims) { dataItem in
NavigationLink(destination: ClaimDetails()){
HStack(spacing: 10){
VStack(alignment: .leading, spacing: 3) {
Text(dataItem.subject)
Text(String(dataItem.caseNumber)).font(.subheadline).italic()
}
}
}
}
// Navigation Bar
.navigationBarTitle(Text("Exisitng Claims"), displayMode: .inline)
// Navigation bar button
.navigationBarItems(
leading: Button("Logout") {
self.viewModel.claims = []
UserAccountManager.shared.logout()
},
trailing: NavigationLink(
destination: NewClaim()) {
Image(systemName: "plus")
}
)
}
.onAppear{
print("On Appear firing for ExistingClaims()")
self.viewModel.fetchDataFromSalesforce()
}
}
}
List(viewModel.claims) { dataItem in
NavigationLink(destination: ClaimDetails()){
HStack(spacing: 10){
VStack(alignment: .leading, spacing: 3) {
Text(dataItem.subject)
Text(String(dataItem.caseNumber)).font(.subheadline).italic()
}
}
}
}.onReceive(self.newClaim.complete){ data in
print(data)
}
当我添加onReceive时,我得到一个非常奇怪的错误-如屏幕截图所示:
知道发生了什么事吗?我的最终目标是在environmentobject的已发布属性(或状态,我尝试了两者)更新时刷新列表数据。我没有看到
NewClaimModel
,但假设它应该如下所示
}.onReceive(self.newClaim.$complete){ data in // .$complete is Publisher
print(data)
}
我猜您的onReceive调用中有错误,而不是编译器指示的行。通常,在SwiftUI或函数生成器中,无用的错误消息仍然很常见。例如,NewClaimModel.complete是否真的是一个发布者并可由给定视图访问?它可能是@Published属性,而您缺少提升操作员,即您是指self.newClaim.$complete吗?编辑您的问题,将
NewClaimModel的complete
属性声明包括在内。