iOS RxSwift + MVVM 如何构建ViewModel?

本文探讨了在iOS开发中如何利用RxSwift构建ViewModel,强调ViewModel应具备可插拔和可测试性。文章对比了两种方案:方案一通过定义ViewModelType协议,简单但有限制;方案二则利用RxSwift的绑定机制,实现更自由的输入输出,具有更强的兼容性,但使用相对复杂。最终,开发者可以根据项目需求选择合适的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


1306450-e481e2c5cbc0b28d.png



ViewModel需要具备以下特性:

  • 可插拔;
  • 可测试;
  • 采用绑定机制的MVVM模式会更加强大,所以ViewModel要充分利用RxSwift;

把ViewModel当做黑箱,它可以接收输入,并产生输出,这就是定义ViewModel最好的原则。


方案一 (不采用Subjects)



定义ViewModelType协议

protocol ViewModelType {
  associatedtype Input
  associatedtype Output

  func transform(input: Input) -> Output
}

这种方案简单易行,只需要一次性提供Input给ViewModel,然后ViewModel即可给出Output。



让我们创建示例Demo:
输入内容,然后点击Validate按钮。最后,显示校验结果。

1306450-3875b31692d1bd15.gif



创建SayHelloViewModel,它需要知道输入的文本以及按钮点击事件,这就是Input。
然后Output是文本内容。

final class SayHelloViewModel: ViewModelType {
  struct Input {
    let name: Observable<String>
    let validate: Observable<Void>
  }

  struct Output {
    let greeting: Driver<String>
  }

  func transform(input: Input) -> Output {
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值