前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RxSwift 使用

RxSwift 使用

作者头像
莫空9081
修改2024-02-23 13:08:18
2700
修改2024-02-23 13:08:18
举报
文章被收录于专栏:iOS 备忘录

RxSwift使用备忘

RxSwift 常用方法使用,这里记录一下。

RxSwfit实现搜索

distinctUntilChanged的作用是,相邻的重复事件不产生新的事件,所以搜索中使用distinctUntilChanged可以保证只有每次触发的搜索都是不同的字符串,也可以保证输入停止后只会触发一次搜索。

throttledebounce 的区别:

  • throttle 每隔固定时间调用
  • debounce 事件停止后隔多少秒调用

所以,如果需要实现输入中搜索,使用 throttle

代码语言:javascript
复制

fileprivate func configureSearch() {
  searchBar.rx.text
        .orEmpty
        .throttle(1.0, scheduler: MainScheduler.instance)
        .distinctUntilChanged()
        .subscribe { [unowned self] (query) in
            
        }.disposed(by: disposeBag)
}

而如果实现输入停止后搜索,使用 debounce

代码语言:javascript
复制

fileprivate func configureSearch() {
  searchBar.rx.text
        .orEmpty
        .distinctUntilChanged()
        .debounce(0.5, scheduler: MainScheduler.instance)
        .subscribe { [unowned self] (query) in
            
        }.disposed(by: disposeBag)
}

RxSwift 实现点击

代码语言:javascript
复制

button.rx.tap
    .subscribe(onNext: {
        print("button Tapped")
    })
    .disposed(by: disposeBag)

RxSwift 实现代理

scrollView 代理

代码语言:javascript
复制

override func viewDidLoad() {
    super.viewDidLoad()

    scrollView.rx.contentOffset
        .subscribe(onNext: { contentOffset in
            print("contentOffset: \(contentOffset)")
        })
        .disposed(by: disposeBag)
}

tableView 代理

代码语言:javascript
复制

fileprivate func setupVM() {
    vm.dataList
        .bind(to: tableView.rx.items(cellIdentifier: Cell.CellIdentifier, cellType: Cell.self)) { _, model, cell in
            cell.model = model
        }
        .disposed(by: disposeBag)
    
    Observable
        .zip(tableView.rx.itemSelected, tableView.rx.modelSelected(CellModel.self))
        .subscribe(onNext: { [weak self] indexPath, item in
            self?.handleSelectItem(at: indexPath, model: item)
        })
        .disposed(by: disposeBag)
    
    vm.pageNum
        .subscribe(onNext: { [weak self] pageNum in
            self?.loadData(pageNum)
        })
        .disposed(by: disposeBag)
    
    vm.isLastPage
        .subscribe(onNext: { [weak self] isLastPage in
            self?.tableView.mj_header?.endRefreshing()
            if isLastPage {
                self?.tableView.mj_footer?.endRefreshingWithNoMoreData()
            } else {
                self?.tableView.mj_footer?.endRefreshing()
            }
        })
        .disposed(by: disposeBag)
}

RxSwift 实现通知

代码语言:javascript
复制

override func viewDidLoad() {
    super.viewDidLoad()

    NotificationCenter.default.rx
        .notification(.UIApplicationWillEnterForeground)
        .subscribe(onNext: { (notification) in
            print("Application Will Enter Foreground")
        })
        .disposed(by: disposeBag)
}

RxSwift整合网络请求

flatMapLatest,处理多个任务有依赖关系的情况,避免回调地狱

代码语言:javascript
复制

/// 通过用户名和密码获取用户信息
API.token(username: "beeth0ven", password: "987654321")
    .flatMapLatest(API.userInfo)
    .subscribe(onNext: { userInfo in
        print("获取用户信息成功: \(userInfo)")
    }, onError: { error in
        print("获取用户信息失败: \(error)")
    })
    .disposed(by: disposeBag)

zip,同时发送多个请求,多个请求都完成后,再往下处理,就可以通过zip来实现

combineLatest,同时发生多个请求,每个请求完成后,都会触发处理事件的方法

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-02-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • RxSwift使用备忘
    • RxSwfit实现搜索
      • RxSwift 实现点击
        • RxSwift 实现代理
          • scrollView 代理
          • tableView 代理
        • RxSwift 实现通知
          • RxSwift整合网络请求
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档