iOS App的设计架构——MVVM模式的实现

本文探讨了MVVM架构在iOS应用中的实现,重点讲解了如何构建ViewModel,包括不使用Subject和使用Subject两种方式。文中提到了Subject在处理UITableView等复杂场景中的优势,并详细介绍了UITextField、UILabel、UISlider、UITableView、UISwitch、UISegmentedControl的事件监听。文章还提及配合RxSwift框架来实现函数式编程。
摘要由CSDN通过智能技术生成

一、前言

ViewModel是MVVM架构模式与MVC架构模式最大的区别点。MVVM架构模式把业务逻辑从controller集中到了ViewModel中,ViewModel的业务模型如下:
在这里插入图片描述

viewmodel相当于是一个黑盒子,封装了业务逻辑,进行输入和输出的转换。
其中View、Model与MVC架构模式下负责的任务相同。controller由于业务逻辑移到了Viewmodel中,它本身担起了中间调用者角色,负责把View和Viewmodel绑定在一起。

需要配合RxSwift框架使用

二、构建ViewModel

不用Subject

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

protocol ViewModelType {
   
  associatedtype Input
  associatedtype Output
 
  func transform(input: Input) -> Output
}

让我们创建示例Demo:
输入内容,然后点击“确定”按钮。最后,显示校验结果。
在这里插入图片描述

创建SayHelloViewModel

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 {
   
    let greeting = input.validate
      .withLatestFrom(input.name)
      .map {
    name in
        return "Hello \(name)!"
      }
      .startWith("")
      .asDriver(onErrorJustReturn: ":-(")
 
    return Output(greeting: greeting)
  }
}

创建SayHelloViewController

final class SayHelloViewController: UIViewController {
   
  
  @IBOutlet weak var nameTextField: UITextField!
  @IBOutlet weak var validateButton: UIButton!
  @IBOutlet weak var greetingLabel: UILabel!
  
  private let viewModel = SayHelloViewModel()
  private let bag = DisposeBag()
  
  override func viewDidLoad() {
   
    super.viewDidLoad()
    bindViewModel()
  }
  
  private func bindViewModel() {
   
    let inputs = SayHelloViewModel.Input(name:nameTextField.rx.text.orEmpty.asObservable(),
    validate: validateButton.rx.tap.asObservable())
    
    let outputs = viewModel.transform(input: inputs)
    outputs.greeting
      .
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值