Swiftui 是否有更好的方法使用Combine分配数据

Swiftui 是否有更好的方法使用Combine分配数据,swiftui,combine,Swiftui,Combine,我正处于理解组合的开始阶段,令我惊讶的是,我居然得到了这个简单的模型。在该模型中,我只需使用.receive将数据传递给init中的.receive发布服务器。我想知道的是: 是否有更好的方法实现此功能 在我添加.store()并传入Set=[]之前,所有这些都不起作用。据我所知,这是一种取消数据流的方法。但是,尽管它只是取消流,但没有它,流也无法工作。想知道我对这一点的理解是否正确,以及是否有更好的方法来实现可取消的 导入快捷界面 进口联合收割机 结构ContentView:View{ @O

我正处于理解组合的开始阶段,令我惊讶的是,我居然得到了这个简单的模型。在该模型中,我只需使用.receive将数据传递给init中的.receive发布服务器。我想知道的是:

  • 是否有更好的方法实现此功能
  • 在我添加.store()并传入Set=[]之前,所有这些都不起作用。据我所知,这是一种取消数据流的方法。但是,尽管它只是取消流,但没有它,流也无法工作。想知道我对这一点的理解是否正确,以及是否有更好的方法来实现可取消的
  • 导入快捷界面
    进口联合收割机
    结构ContentView:View{
    @ObservedObject变量viewModel=SimpleViewModel()
    @国家私有变量转换器=“”
    var body:一些观点{
    VStack{
    文本字段(“输入要传递的文本”,文本:$changer)
    .padding()
    .textFieldStyle(RoundedBorderTextFieldStyle())
    HStack(对齐:。顶部){
    按钮(操作:{
    viewModel.changer=self.changer
    }){
    文本(“更改”)
    .fontWeight(.粗体)
    .padding()
    .foregroundColor(.白色)
    .背景(颜色.蓝色)
    .转弯半径(10)
    }
    VStack{
    按钮(操作:{}){
    文本(“接收”)
    .fontWeight(.粗体)
    .padding()
    .foregroundColor(.白色)
    .背景(颜色.绿色)
    .转弯半径(10)
    }
    团体{
    文本(viewModel.firstValue).bold()
    文本(viewModel.secondValue).bold()
    文本(viewModel.thirdValue).bold()
    }.padding(.vertical)
    }
    }
    }
    }
    }
    结构内容视图\u预览:PreviewProvider{
    静态var预览:一些视图{
    ContentView()
    }
    }
    最后一个类SimpleViewModel:observeObject{
    @已发布的var changer=“”
    @已发布的var firstValue=“Value#1”
    @已发布var secondValue=“Value#2”
    @已发布的var thirdValue=“Value#3”
    私有变量CancelableSet:Set=[]
    init(){
    美元兑换商
    .receive(打开:RunLoop.main)
    .assign(给:\.firstValue,开:self)
    .store(位于:&可取消集)
    }
    }
    
    我假设在这种情况下,您可以使用didSet,比如

    final class SimpleViewModel: ObservableObject {
        @Published var changer = "" {
           didSet { firstValue = changer }
        }
    
        // ... other code
    }
    
    final class SimpleViewModel: ObservableObject {
        @Published var changer = "" {
           didSet { firstValue = changer }
        }
    
        // ... other code
    }