美文网首页
RxSwift 应用(III)

RxSwift 应用(III)

作者: Harely | 来源:发表于2019-12-04 16:22 被阅读0次

UI交互

UIButton 点击

self.registerBtn.rx.tap.subscribe { [weak self] (next) in
            self?.registerBtn.backgroundColor = UIColor.red
            print("\("注册了")")
        }.disposed(by: disposeBag)

打印:
注册了



UITextField 文本响应

let disposeBag = DisposeBag()

self.userNameInput.rx.text.orEmpty.changed.subscribe(onNext: { (text) in
            
            print("监听到了:- \(text)")
        }).disposed(by: disposeBag)
       
self.userNameInput.rx.text.orEmpty.bind(to: self.registerBtn.rx.title()).disposed(by: disposeBag)

打印:
监听到了:- 2
监听到了:- 22
监听到了:- 222

效果:


文本响应



UIScrollView 滚动响应

scrollView.rx.contentOffset.subscribe(onNext: { [weak self] (content) in
        self?.view.backgroundColor = UIColor.init(red: content.y/255.0*0.8, green: content.y/255.0*0.3, blue: content.y/255.0*0.6, alpha: 1);
        print(content.y)
    }).disposed(by: disposeBag)



手势响应

let tap = UITapGestureRecognizer()
    self.label.addGestureRecognizer(tap)
    self.label.isUserInteractionEnabled = true
    tap.rx.event.subscribe { (event) in
        print("我点击了label")
    }.disposed(by: disposeBag)  

打印:
我点击了label


KVO 响应

class Student: NSObject {
    
     //这里一定要用@objc,因为KVO用到了OC的runtime,否则发现不到这个属性numberID
    //这里还要用到dynamic,否则改变属性值时无法观察到变化
    @objc public dynamic var numberID: String?// = "RxSwift 的 KVO"

}



let student = Student()
student.rx.observeWeakly(String.self, "numberID").subscribe(onNext: { (change) in
            print(change ?? "numberOne")
            }).disposed(by: disposeBag)        
        
student.numberID = "OneByOne"      

打印:
numberOne//为空,打印为这个值
OneByOne


通知响应

NotificationCenter.default.rx.notification(UIResponder.keyboardWillShowNotification).takeUntil(self.rx.deallocated)//页面销毁自动移除通知监听
            .subscribe { (event) in
            print("键盘出现通知来了: \(event)")
        }.disposed(by: disposeBag)

打印:
键盘出现通知来了: next(name = UIKeyboardWillShowNotification,
object = nil,
userInfo = Optional([AnyHashable("UIKeyboardCenterEndUserInfoKey"):NSPoint: {207, 723}, AnyHashable("UIKeyboardAnimationCurveUserInfoKey"): 7, AnyHashable("UIKeyboardCenterBeginUserInfoKey"): NSPoint: {207, 1069}, AnyHashable("UIKeyboardFrameBeginUserInfoKey"): NSRect: {{0, 896}, {414, 346}}, AnyHashable("UIKeyboardBoundsUserInfoKey"): NSRect: {{0, 0}, {414, 346}}, AnyHashable("UIKeyboardAnimationDurationUserInfoKey"): 0.25, AnyHashable("UIKeyboardFrameEndUserInfoKey"): NSRect: {{0, 550}, {414, 346}}, AnyHashable("UIKeyboardIsLocalUserInfoKey"): 1]))


Timer 定时器

 let timer = Observable<Int>.interval(1, scheduler: MainScheduler.instance)
        timer.subscribe(onNext: { (number) in
            print("定时器:\(number)")
            }).disposed(by: disposeBag)

打印:
定时器:0
定时器:1
定时器:2
我返回上一级的ViewController,定时器就销毁了,停止了打印

  使用RxSwift免去了定时器的一些不必要的麻烦,如:runloop影响、销毁问题、线程问题。


网络请求

let url = URL(string: "https://www.jianshu.com/p/5533c99bfa8e")
        URLSession.shared.rx.response(request: URLRequest(url: url!))
            .subscribe(onNext: { (response, data) in
                print("------->> response: \(response)")
                print("~~~~~~~>> data: \(data)")
            }, onError: { (error) in
                print("error is: \(error)")
            }, onCompleted: {
                print("结束了")
            }).disposed(by: disposeBag)

打印:


请求打印

UITextField Demo


@IBOutlet weak var number1: UITextField!
@IBOutlet weak var number2: UITextField!
@IBOutlet weak var number3: UITextField!

@IBOutlet weak var result: UILabel!

let disposeBag = DisposeBag()

Observable.combineLatest(number1.rx.text.orEmpty, number2.rx.text.orEmpty, number3.rx.text.orEmpty) { text1, text2, text3 -> Int in
            let aa = (Int(text1) ?? 0) + (Int(text2) ?? 0)
            return aa + (Int(text3) ?? 0)
            }
            .map{$0.description}
            .bind(to: result.rx.text)
            .disposed(by: disposeBag)

效果:


计算

相关文章

网友评论

      本文标题:RxSwift 应用(III)

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