美文网首页
RxSwift->获取当前时间

RxSwift->获取当前时间

作者: 骑着雅迪小毛驴上班的老瞿 | 来源:发表于2017-12-11 22:47 被阅读0次

    上篇文章中将一些基础性的知识说明了下,接下来运用起来再MVVM,这样子更加接近实际的开发
    http://www.jianshu.com/p/a1380947f050
    1.创建一个ViewMode协议

    import Foundation
    // ViewModel定义一个协议,其实viewModel做的就是一个输入流和一个输出流的转换
    protocol ViewModelType {
        associatedtype input
        associatedtype output
        func transform(input:input) -> output
    }
    

    2.将controller里面的逻辑写到viewmodel里面来

    import Foundation
    import RxCocoa
    import RxSwift
    final class ViewModel:ViewModelType{
        func transform(input:input) -> output {
            func transform() -> String{
                print("我被订阅了")
                let dateFormatter = DateFormatter()
                dateFormatter.dateStyle = .medium
                dateFormatter.timeStyle = .medium
                return dateFormatter.string(from: Date())
            }
            let currentTime = input.clickButton.map(transform)
            return output.init(currentTime: currentTime)
        }
    }
    extension ViewModel{
        struct input {
            // 输入的是一个button Void类型
            let clickButton:Driver<Void>
        }
        struct output {
            // 输出的是一个 string类型
            let currentTime:Driver<String>
        }
    }
    
    

    3.接下来就是调用了

      func setupUI7(){
            let vm = ViewModel()
            let inputt = ViewModel.input(clickButton: self.ClickBtn.rx.tap.asDriver())
            let output = vm.transform(input: inputt)
            output.currentTime.drive(self.currentTime1.rx.text).disposed(by: dispseBag)      
        }
    

    总结:使用了mvvm的话控制器里面就不要写什么逻辑代码,只要传一个输入流(button)接受到一个输出流(时间String)然后通过drive绑定到UI,让text观察者接收到string,最后回收垃圾

    结语:不知道我的理解有没有错误,如果有错误,请指出,谢谢,共同学习

    相关文章

      网友评论

          本文标题:RxSwift->获取当前时间

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