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,最后回收垃圾
结语:不知道我的理解有没有错误,如果有错误,请指出,谢谢,共同学习