RXSwift初体验

RxSwift作用

  • 在以前编写代码的时候,经常需要监听按钮的点击事件,textField文本框输入值的变化等,通过addTarget或者delegate等来完成事件的点击或者获取输入的新值,代码分散,不易查找,而Rx将常用的事件转化为Rx信号,使业务逻辑和功能逻辑绑定到一起,方便查找。

RxSwift安装(通过cocoapods)

target 'swiftDemo' do
  # Comment the next line if you're not using Swift and don't want to use dynamic frameworks
  use_frameworks!

 pod 'RxSwift', '~> 5.0.0'
 pod 'RxCocoa', '~> 5.0.0'
end

在需要使用 RxSwift 的地方 import 进来就可以了

import RxSwift
import RxCocoa
  • RxSwift:它只是基于 Swift 语言的 Rx 标准实现接口库,所以 RxSwift 里不包含任何 Cocoa 或者 UI方面的类。
  • RxCocoa:是基于 RxSwift针对于 iOS开发的一个库,它通过 Extension 的方法给原生的比如 UI 控件添加了 Rx 的特性,使得我们更容易订阅和响应这些控件的事件。

RxSwift简单实用对比

  • 注意事项let disposeBag = DisposeBag()


    Snip20190724_3.png
  • Button - addTarget的区别

func setupButton() {
        
        let button: UIButton = UIButton.init(type: .custom)
        button.frame = CGRect(x: 10, y: 30, width: 60, height: 50);
        button.backgroundColor = UIColor.red
        button.setTitle("系统按钮", for: .normal)
        button.titleLabel?.font = UIFont.systemFont(ofSize: 13)
        button.addTarget(self, action: #selector(buttonClick(_:)), for: .touchUpInside)
        self.view.addSubview(button)
    }
    @objc func buttonClick(_ sender: UIButton) {
        print("点我啊")
    }
    
    func setupRXButton() {
        let button: UIButton = UIButton.init(type: .custom)
        button.frame = CGRect(x: 90, y: 30, width: 60, height: 50);
        button.backgroundColor = UIColor.blue
        button.setTitle("RX按钮", for: .normal)
        button.titleLabel?.font = UIFont.systemFont(ofSize: 13)
        self.view.addSubview(button)
    
        let _ = button.rx.tap
            .subscribe(onNext: { () in
                print("rx按钮点击")
            }).disposed(by: disposeBag)
    }
  • textField - delegate的区别
override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        inputField.delegate = self
    }
//Rx
func setRXTextField() {
       let _ = self.inputField.rx.text.orEmpty
            .subscribe(onNext: { (text) in
                print(text)
            }).disposed(by: disposeBag)
    }

extension ViewController : UITextFieldDelegate {
    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        print(textField.text ?? "",range,string)
        return true;
    }
}

你可能感兴趣的:(RXSwift初体验)