RxSwift->获取当前时间

2017-12-11  本文已影响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,最后回收垃圾

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

上一篇下一篇

猜你喜欢

热点阅读