美文网首页
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