美文网首页
RxSwift->获取当前时间<基础篇>

RxSwift->获取当前时间<基础篇>

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

传送:http://www.jianshu.com/p/07b80b326c6a 这里是MVVM篇的使用
1.折腾了一天现在也由于pods的原因导致在将RxSwift导入到项目里面老是报错,最后还是开始去用Carthage去管理项目就没有报错了,现在开始了2个月的计划记住(这里就不详细去说怎么使用Carthage的好处,真的比pods强很多,推荐使用,而且他并不与pods相互冲突,在项目里面可以同时使用)不多说了,这里就直接开始一个小的功能,获取系统当前的时间

image.png

功能大概是这样子的,按钮是一个可观察的流,对他进行了订阅,然后通过对应的逻辑代码,获取到当前的系统时间
大家看完了demo以后会发现一个神奇的效果就是并没有对应的UIButton的响应方法,可是我还是将label赋值了,获取了系统的时间,这就是RxSwift的神奇之处
//---------------------------使用subscribe-----------------------------------//

import UIKit
import RxSwift
import RxCocoa
class ViewController3: UIViewController {

    @IBOutlet weak var currrentTime2: UILabel!
    @IBOutlet weak var ClickBtn: UIButton!
    // 垃圾回收机制
    fileprivate let dispseBag = DisposeBag()
    override func viewDidLoad() {
        super.viewDidLoad()
        setupUI()
    }
    func setupUI(){
        // self.ClickBtn.rx.tap说明按钮在Rxswift里面是一个可观察对象流,可以对他进行订阅
        // 在订阅里面不关心button的值的话 用" _ in "
        // 关心的是每次点击的时候对这个label的值得赋值
        self.ClickBtn.rx.tap.subscribe({
            [weak self] _ in
            guard let this = self else{
                return
            }
            // 这里的内容就是相应的逻辑,使用swift编写就ok了
            let dateFormatter = DateFormatter()
            dateFormatter.dateStyle = .medium
            dateFormatter.timeStyle = .medium
            this.currrentTime2.text = dateFormatter.string(from: Date())
        }).disposed(by: dispseBag)
        // .disposed(by: dispseBag)将资源回收
    }
}

控件的创建我就不多说了,还是原生的

    fileprivate let dispseBag = DisposeBag()// 垃圾回收机器,每一次进行了订阅操作以后,通过这个回收资源,
   .disposed(by: dispseBag)// 这里就是将资源进行了回收,基本上每次订阅以后都会有这一个操作

//---------------------------使用bind-----------------------------------//

func setupUI2(){
        //  self.ClickBtn.rx.tap 这一步已经获取了一个可观察对象流
        // tap是void类型的 map可以将流转换成string
        // .bind绑定UI
        self.ClickBtn.rx.tap.map({
            _ in
            let dateFormatter = DateFormatter()
            dateFormatter.dateStyle = .medium
            dateFormatter.timeStyle = .medium
            return dateFormatter.string(from: Date())
        }).bind(to:self.currrentTime2.rx.text).disposed(by: dispseBag)// text是一个观察者.上面的map首先变成一个string然后绑定UI,bind其实是subscibe的一种另外的写法,推荐使用
        
    }

 

//---------------------------使用drive 还有 share-----------------------------------//
drive天然自带了share

extension ViewController3{
// 使用bind的写法
    func setup3(){
        func transform() -> String{
            print("我被订阅了")
            let dateFormatter = DateFormatter()
            dateFormatter.dateStyle = .medium
            dateFormatter.timeStyle = .medium
            return dateFormatter.string(from: Date())
        }
        let test1 = self.ClickBtn.rx.tap.map(transform)
        test1.bind(to: self.currentTime1.rx.text).disposed(by: dispseBag)
        test1.bind(to: self.currrentTime2.rx.text).disposed(by: dispseBag)
    }
    // share() 订阅的流是同一份的话,共享
    func setup4(){
        func transform() -> String{
            print("我被订阅了")
            let dateFormatter = DateFormatter()
            dateFormatter.dateStyle = .medium
            dateFormatter.timeStyle = .medium
            return dateFormatter.string(from: Date())
        }
        let test1 = self.ClickBtn.rx.tap.map(transform).share()
        test1.bind(to: self.currentTime1.rx.text).disposed(by: dispseBag)
        test1.bind(to: self.currrentTime2.rx.text).disposed(by: dispseBag)
    }
    // drave天然带了share()这个属性    强烈推荐UI上面
    func setup5(){
        func transform() -> String{
            print("我被订阅了")
            let dateFormatter = DateFormatter()
            dateFormatter.dateStyle = .medium
            dateFormatter.timeStyle = .medium
            return dateFormatter.string(from: Date())
        }
        let test1 = self.ClickBtn.rx.tap.asDriver().map(transform)
        test1.drive(self.currentTime1.rx.text).disposed(by: dispseBag)
        test1.drive(self.currrentTime2.rx.text).disposed(by: dispseBag)
    }
    // 使用driver  setupUI6()方法是重写了setupUI2()使用driver
    func setupUI6(){
        self.ClickBtn.rx.tap.asDriver().map ({
            _ in
            let dateFormatter = DateFormatter()
            dateFormatter.dateStyle = .medium
            dateFormatter.timeStyle = .medium
            return dateFormatter.string(from: Date())
        }).drive(self.currentTime1.rx.text).disposed(by: dispseBag)
    }

}

相关文章

网友评论

      本文标题:RxSwift->获取当前时间<基础篇>

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