RxSwift简单应用

325 阅读1分钟

RxSwift优点:

  1. 复用 - 复用性比较强,减少代码量
  2. 清晰 - 声明不可变更,代码可读性强
  3. 思维 - 统一的函数响应式编程思维,熟练掌握后可触类旁通、举一反三
  4. 稳定 - RxSwift通过单元测试
  5. 风格 - 主流且较为前卫的代码风格

`

//MARK: - KVO

    func setupKVO() {

        self.rxStuent.rx.observeWeakly(Int.self, "age")

            .subscribe { value in

                print("(self.rxStuent.name) is (value) old")

            }

            .disposed(by: disposeBag)

    }

    

    //MARK: - button响应

    func setupButton() {

        self.rxBtn.rx.tap

            .subscribe { _ in

                print("you click done")

            }

            .disposed(by: disposeBag)

        self.rxBtn.rx.controlEvent(.touchDown)

            .subscribe { _ in

                print("touch down")

            }

            .disposed(by: disposeBag)

        self.rxBtn.rx.controlEvent(.touchCancel)

            .subscribe { _ in

                print("touch cancel")

            }

            .disposed(by: disposeBag)

    }

    

    //MARK: - textfiled

    func setupTextFiled() {

        self.textFld.rx.text.orEmpty.changed

            .subscribe { text in

                print(text)

            }

            .disposed(by: disposeBag)

        

        self.textFld.rx.text.changed// changed 在textfile有变化时才触发值绑定,没有changed则在初始化序列时触发

            .bind(to: self.rxBtn.rx.title())

            .disposed(by: disposeBag)

        

        self.textFld.rx.text.changed

            .bind(to: self.titleLab.rx.text)

            .disposed(by: disposeBag)

        

    }

    

    //MARK: - scrollView

    func setupScrollerView() {

        self.rxScrollView.rx.contentOffset.changed

            .subscribe { [weak self]contentSet  in

                self?.view.backgroundColor = UIColor.init(red: contentSet.y/255.0 * 0.2, green: contentSet.y/255.0 * 0.4, blue: contentSet.y/255.0 * 0.6, alpha: 1)

            }

            .disposed(by: disposeBag)

    }

    

    

    //MARK: - 手势

    func setupGestureRecognizer() {

        let tap = UITapGestureRecognizer()

        self.titleLab.addGestureRecognizer(tap)

        self.titleLab.isUserInteractionEnabled = true

        tap.rx.event.subscribe { sender in

            print(sender.view!)

        }

        .disposed(by: disposeBag)

    }

    

    //MARK: - 通知

    func setupNotification() {

        NotificationCenter.default.rx.notification(UIResponder.keyboardWillShowNotification)

            .subscribe { noti in

                print(noti)

            }

            .disposed(by: disposeBag)

\

    }

    

    //MARK: - timer定时器

    func setupTimer() {

        rxTimer = Observable.interval(.seconds(1), scheduler: MainScheduler.instance)

        rxTimer.subscribe { num in

            print(num)

        }

        .disposed(by: disposeBag)

    }

    

    //MARK: - 网络请求

    func setupNetwork() {

        let url: URL! = URL(string: "www.baidu.com")

        URLSession.shared.rx.response(request: URLRequest(url: url))

            .subscribe { response, data in

                print(response)

            }

            .disposed(by: disposeBag)

    }

`

完整代码