Ios 使用RxSwift从视图模型向视图中添加动态自定义控件

Ios 使用RxSwift从视图模型向视图中添加动态自定义控件,ios,swift,rx-swift,Ios,Swift,Rx Swift,我最近开始使用RxSwift。我现在确实有了一些基础知识。我有一个视图控制器,为其创建了相应的视图模型,定义了一些属性,并绑定到视图中的视图控制器上的一些标签。这种装订很好用 我还有一些自定义控件,它们根据api响应中的某些条件动态添加到视图控制器中的scrollview中。由于API调用是通过视图模型进行的,因此视图模型将具有完整的响应,并且可以直接设置与视图上的labels控件绑定的属性。下面是我需要一些想法或提示的场景 根据API响应中的一些标志,我需要告诉view动态地将自定义控件A、B

我最近开始使用RxSwift。我现在确实有了一些基础知识。我有一个视图控制器,为其创建了相应的视图模型,定义了一些属性,并绑定到视图中的视图控制器上的一些标签。这种装订很好用

我还有一些自定义控件,它们根据api响应中的某些条件动态添加到视图控制器中的scrollview中。由于API调用是通过视图模型进行的,因此视图模型将具有完整的响应,并且可以直接设置与视图上的labels控件绑定的属性。下面是我需要一些想法或提示的场景

根据API响应中的一些标志,我需要告诉view动态地将自定义控件A、B、C添加到scroll视图中,并将所需的数据传递给自定义控件以进行填充。要传递给自定义控件的数据是使用视图模型的


是否建议创建视图模型(即使是自定义控件)?如果是,我如何使用RxSwift处理上述场景并遵守MVVM模式。基本上,因为完整的数据是视图控制器的视图模型,所以如何以最佳方式与自定义控件共享此数据,同时遵守MVVM模式并保持代码结构化。

这取决于自定义控件的复杂性,若您必须处理其中的大量业务逻辑/数据,那么该视图应该有自己的视图模型

这样想,在应用程序中我们有视图控制器,视图控制器只是一个视图,我们有一个视图模型。因此,当视图控制器非常复杂时,我们可以将其划分为具有自己视图模型的较小视图,如果需要,表视图单元可以有自己的视图模型,这与这里的情况类似

所以我们可能有这样一个视图模型

class CustomControlViewModel: NSObject {
    var data: String!
    var flag: Int!

    init(data: String, flag: Int) {
        self.data = data
        self.flag = flag
    }
}
并且数据在ViewControllerViewModel中进行控制

func createCustomControlViewModel() -> CustomControlViewModel {
    return CustomControlViewModel(data: "data from view model", flag: 1)
}

希望这个答案能帮助您

我对所有自定义控件都有业务逻辑&因此为每个控件创建视图模型是有意义的。但是在主视图控制器xib中,没有用于自定义控件的占位符视图。我只有一个scrollview,根据API响应,我需要调用自定义控件的实例,并将其添加到scroll视图中并设置约束。根据您的建议,我可以创建customViewControlViewModel,但是如何通知视图调用自定义控件的实例,添加到滚动视图并使用我的主视图控制器视图模型创建的视图模型?我认为您应该有一个视图来包装这些视图,并且每次都必须从主视图模型更新视图(调用API后),您应该删除该视图中的视图并再次绘制它们。通常我们希望在这种情况下使用的方法是使用表视图,只需通知表更新单元格,它将基于新数据重新创建。