RXSwift常用操作

来源:互联网 发布:网络端口有几根线 编辑:程序博客网 时间:2024/06/05 14:07

1.按钮的点击
testBtn1.rx.tap.subscribe { (event : Event<()>) in

            print("按钮1发生了点击")

        }.addDisposableTo(bag)

2.监听文本框的输入

textField1.rx.text.subscribe { (event : Event<String?>) in
            print(event.element!!)
            }.addDisposableTo(bag)

textField1.rx.text.subscribe(onNext: { (str : String?) in
            print(str!)
        }).addDisposableTo(bag)


3.将textField与lable绑定

textField1.rx.text
            .bindTo(testLabel1.rx.text)
            .addDisposableTo(bag)

4.监听文本框的改变

testLabel1.rx.observe(String.self, "text")
            .subscribe(onNext: { (str : String?) in
                print(str)
            }).addDisposableTo(bag)

5.监听scrollVIew的偏移

scrollView.rx.contentOffset
            .subscribe(onNext: { (point : CGPoint) in
                print(point)
            }).addDisposableTo(bag)

6.登录界面的逻辑控制

/// 事件监听
    func initEventHandle() {
        weak var weakSelf = self
        let phoneTextFieldValid = phoneTextField.rx.text
            .map{_ in
                return String.isPhoneNum(phoneNum: (weakSelf?.phoneTextField.text!)!)
            }
        let pwdFieldValid = pwdTextField.rx.text.map { _ in
            return String.isPassWord(pwd: (weakSelf?.pwdTextField.text!)!)
        }
        
        // 用户名密码都通过验证,才可以点击按钮
        let everythingValid = Observable.combineLatest(phoneTextFieldValid, pwdFieldValid) { (phoneValid, passwordValid) -> Bool in
            phoneValid && passwordValid
        }.subscribe(onNext: { (isvalid) in
            if isvalid==true {
                weakSelf?.loginBtn.isEnabled = true
                weakSelf?.loginBtn.backgroundColor = UIColor.tangerine
            } else {
                weakSelf?.loginBtn.isEnabled = false
                weakSelf?.loginBtn.backgroundColor = UIColor.lightGray
            }
        }, onError: nil, onCompleted: nil, onDisposed: nil)
        everythingValid.addDisposableTo(disposBag) // 释放
    }

7. PublishSubject& ReplaySubject
// 1.PublishSubject, 订阅者只能接受, 订阅之后发出的事件

        let publishSub = PublishSubject<String>()

        publishSub.onNext("18")

        publishSub.subscribe { (event : Event<String>) in

            print(event)

        }.addDisposableTo(bag)

        publishSub.onNext("coderwhy")

        print("-------------------------")

        // 2.ReplaySubject, 订阅者可以接受订阅之前的事件&订阅之后的事件

        let replaySub = ReplaySubject<String>.createUnbounded()

        replaySub.onNext("a")

        replaySub.onNext("b")

        replaySub.onNext("c")        

        replaySub.subscribe { (event : Event<String>) in

            print(event)

        }.addDisposableTo(bag)

        replaySub.onNext("d”)

结果:

next(coderwhy)

-------------------------

next(a)

next(b)

next(c)

next(d)

8、Variable,下面的例子可以用在网络请求完成刷新ui界面的场景

// Variable

        /*

         Variable

            1> 相当于对BehaviorSubject进行装箱

            2> 如果想将Variable当成Obserable, 让订阅者进行订阅时, 需要asObserable转成Obserable

            3> 如果Variable打算发出事件, 直接修改对象的value即可

            4> 当事件结束时,Variable会自动发出completed事件

        */

        let variable = Variable(“a")

        variable.value = "b"        

        variable.asObservable().subscribe { (event : Event<String>) in

            print(event)

        }.addDisposableTo(bag)



9、Swift中如何使用map

let array = [1, 2, 3, 4]

let array2 = array.map({ $0 * $0 })

print(array2)

//在RxSwift中map函数的使用

        Observable.of(1, 2, 3, 4)

            .map { (num : Int) -> Int in

                return num * num

            }

            .subscribe { (event : Event<Int>) in

                print(event)

            }

            .addDisposableTo(bag)

10、RXSwift中tableView的使用

heroVM.herosObserable.asObservable()
            .bindTo(tableView.rx.items(cellIdentifier: "HeroCellID", cellType: UITableViewCell.self)) { row, hero, cell in
                cell.textLabel?.text = hero.name
                cell.detailTextLabel?.text = hero.intro
                cell.imageView?.image = UIImage(named: hero.icon)
        }.addDisposableTo(bag)
        
        tableView.rx.itemSelected.subscribe(onNext: { (indexPath) in
            print(indexPath)
        }).addDisposableTo(bag)
        
        tableView.rx.modelSelected(Hero.self).subscribe(onNext: { (hero : Hero) in
            print(hero.name)
        }).addDisposableTo(bag)
11.手势
        let tap = UITapGestureRecognizer()
        iconView.addGestureRecognizer(tap)
        tap.rx.event
            .subscribe(onNext: { [weak self] x in
                
            })
            .disposed(by: bag)

12.通知

_ = NotificationCenter.default.rx.notification(Notification.Name(rawValue: "message"), object: nil).subscribe { (noti) in
            print("收到通知")
        }

原创粉丝点击