在SwiftUI列表中添加.onReceive关闭->;奇怪的错误

在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

几个小时来,我一直在用我的头来对付这件事,我开始发疯了。我有一个SwiftUI视图,定义如下:

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
属性声明包括在内。