美文网首页Rxswift我爱编程
swift ~ MVVM之模型数据绑定

swift ~ MVVM之模型数据绑定

作者: RudyHao | 来源:发表于2018-06-13 16:26 被阅读0次

Rx之java , swift, kotlin,等 家族越来越壮大不必自然多说,
记录一下MVVM之Variable数据绑定PublishSubject强大之处

  • 比如:要实现一个很简单的给视图赋值的需求

  • 原来MVVM三层的代码可能是这样的:

/**
 * 视图
 */
class View: UIView {

    var label:UILabel = UILabel()
    
    var model:Model?{
        didSet{
            label.text = model?.title
        }
    }
}

/**
 * 模型
 */
class Model: NSObject {
    var title = ""
}
/**
 * 逻辑处理
 */
class ViewModel:NSObject{
    
    func getDataModel() -> Observable<Model> {
        return Observable.create({ (subscriber) -> Disposable in
            let model = Model()
            model.title = "variable title"
            subscriber.onNext(model)
            subscriber.onCompleted()
            return Disposables.create {}
        })
    }
}
/**
 * controller
 */
class Controller: UIViewController {
    let vm = ViewModel()
    var dispose = DisposeBag()
    override func viewDidLoad() {
        super.viewDidLoad()
        let view = View()
        self.view.addSubview(view)
        //这里总感觉不够优雅
        vm.getDataModel().subscribe(onNext: { model in
            view.model = model
        }).disposed(by: dispose)
    }
}
  • 使用Variable改造后的代码是这样的:
/**
 * 视图
 */
class View: UIView {

    var label:UILabel = UILabel()
    
//    var model:Model?{
//        didSet{
//            label.text = model?.title
//        }
//    }
    
    /**
     * 设置数据模型
     */
    var rx_Model: Variable<Model> = Variable(Model())
    
}

/**
 * 数据
 */
class Model: NSObject {
    var title = ""
}
/**
 * 逻辑处理
 */
class ViewModel:NSObject{
    func getDataModel() -> Observable<Model> {
        return Observable.create({ (subscriber) -> Disposable in
            let model = Model()
            model.title = "variable title"
            subscriber.onNext(model)
            subscriber.onCompleted()
            return Disposables.create {}
        })
    }
}

一直有感觉Controller里面的订阅赋值有点变扭,技术不好继续改造...

/**
 * controller
 */
class Controller: UIViewController {
    let vm = ViewModel()
    var dispose = DisposeBag()
    override func viewDidLoad() {
        super.viewDidLoad()
        let view = View()
        self.view.addSubview(view)
        //这里总感觉不够优雅
//        vm.getDataModel().subscribe(onNext: { model in
//            view.model = model
//        }).disposed(by: dispose)
        
        //直接将ViewModel和View需要的数据源绑定起来
        vm.getDataModel().bind(to: view.rx_Model).disposed(by: dispose)
    }
}

码了这么多,就为了解决这一句话,码农不易😄,
有更好解决方案的同学,欢迎留言...

相关文章

  • swift ~ MVVM之模型数据绑定

    Rx之java , swift, kotlin,等 家族越来越壮大不必自然多说,记录一下MVVM之Variable...

  • swift MVVM 数据绑定

    上图先: 主要是利用了闭包,进行数据回调,view更新的目的。

  • vue的初识及基本语法、指令

    MVVM的基本概念: M指的是数据(model),V是视图,VM是视图模型,将数据绑定视图上(双向绑定),view...

  • AngularJS双向绑定之脏检查机制

    一、Angular双向绑定(MVVM) 视图的改变能反映到数据模型上,数据的更改也能在界面呈现 二、触发双向绑定 ...

  • 双向数据绑定

    双向数据绑定 双向数据绑定基于MVVM框架,vue属于MVVM框架 MVVM:M等于model,V等于view,即...

  • Android面试题知识点积累(六)

    MVVM双向数据绑定原理 从视图到模型通过change事件监听视图数据的变化,改变data中的值,实现模型改变,这...

  • VUE基本操作

    数据能从内存中绑定到页面中 理解MVVM model:模型,数据对象(data)view:视图,模板页面viewm...

  • Vue 响应式 / 双向数据绑定

    一、关于双向数据绑定 数据模型和视图之间的双向绑定 Vue 中的 MVVM 通常,我们需要编写代码,将从服务器获取...

  • 数据双向绑定

    MVVM M:model数据模型 V:view 界面 MV:作为桥梁负责沟通view跟model 数据的双向绑定就...

  • Vue2 数据双向绑定原理解析-简易版(个人笔记)

    一、什么是 MVVM 数据双向绑定 MVVM 数据双向绑定主要是指:数据变化更新视图,视图变化更新数据,如下图所示...

网友评论

    本文标题:swift ~ MVVM之模型数据绑定

    本文链接:https://www.haomeiwen.com/subject/prgjeftx.html