RxSwift 初探1

通过 Cocoapods 导入
pod 'RxSwift', '6.5.0'
pod 'RxCocoa', '6.5.0'

使用三步曲
  • 注册监听
  • 订阅
  • 销毁

RXSwift 实际应用

  • KVO
       
func  setupKVO(){
//响应序列 
self.person.rx.observeWeakly(String.self, "name")
        .subscribe { value in
            print(value as Any)
        }
        .disposed(by: disposeBag)
    
}

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    print("来了")
    person.name = "\(person.name) 6"
}

因为使用了kvo监听的原理,所以类中的属性必须使用@objc dynamic 来修饰 ,dynamic 是开启运行时机制。
class LGPerson: NSObject {
   @objc dynamic var name: String = "Bill"
}

  • button
func setupButton(){
    button.rx.controlEvent(.touchUpInside)
        .subscribe { _ in
            print("点击事件")
        }
        .disposed(by: disposeBag)
}

  • textfiled
func setupTextField(){
    textFiled.rx.text.orEmpty.changed
        .subscribe { text in
            print(text)
        }
        .disposed(by: disposeBag)
}
  • scrollView
func setupScrollerView() {
    scrollView.rx.contentOffset
            .subscribe { [weak self]content in
                self?.view.backgroundColor = UIColor.init(red: content.y/255*0.8, green: content.y/255*0.6, blue: content.y/255*0.3, alpha: 1)
            }
            .disposed(by: disposeBag)

    }

  • 手势
func setupGestureRecongizer(){
   let tap = UITapGestureRecognizer()
   self.view.addGestureRecognizer(tap)
   self.view.isUserInteractionEnabled = true

   tap.rx.event
       .subscribe { tap in
           print(tap.view)
       }
       .disposed(by: disposeBag)
   
}

  • 通知
func setupNotification(){
    // 监听键盘弹出通知
    NotificationCenter.default.rx.notification(UIResponder.keyboardWillShowNotification)
            .subscribe { noti in
                print("键盘弹起")
            }
            .disposed(by: disposeBag)
}

  • timer定时器
func setupTimer(){
    var timer: Observable<Int> = Observable<Int>.interval(.seconds(1), scheduler: MainScheduler.instance)
        timer.subscribe { num in
            print(num)
        }
        .disposed(by: disposeBag)
}

  • 网络请求
func setupNetwork() {
    let url = URL(string: "https://www.baidu.com")
    URLSession.shared.rx.response(request: URLRequest(url: url!))
        .subscribe { response, data in
            print(response)
        }
        .disposed(by: disposeBag)
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容