RXSwift常用操作


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("收到通知")
        }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章