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()
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;
}
}