通过按钮刷新界面参数,设置延时为2s
// ViewController.swift
// RxSwiftTest
//
// Created by travey on 2018/11/5.
// Copyright © 2018年 ZhouShijie. All rights reserved.
import UIKit
import RxSwift
import RxCocoa
import SnapKit
import RxDataSources
class ViewController: UIViewController {
let disposeBag = DisposeBag()
var tableView: UITableView!
var refreshbtn: UIButton! // 创建一个刷新按钮
// 通过刷新按钮的流,产生随机数
// 自定义函数,返回的类型是一个Observable,这个Observable是一个数组,每个数组装的元素类型是一个SectionModel类型,SectionModel类型里面有两个变量,一个是标题,一个是下面的cell,cell用一个数组展示,并且要求标题是String类型的,cell里面元素的类型是Int类型的
func getRandomResult() -> Observable<[SectionModel<String, Int>]> {
print("正在请求数据......")
let items = Array(repeating: 0, count: 10).map{ _ in
Int(arc4random())
}
let observable = Observable.just([SectionModel(model: "Zhou", items: items)])
return observable.delay(2, scheduler: MainScheduler.instance)
}
override func viewDidLoad() {
// UI设置
tableView = UITableView(frame: CGRect(x: 0, y: 200, width: view.bounds.width, height: view.bounds.height - 200), style: .plain)
tableView!.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
refreshbtn = UIButton()
refreshbtn.setTitle("刷新", for: .normal)
refreshbtn.setTitleColor(UIColor.black, for: .normal)
refreshbtn.frame = CGRect(x: 0, y: 0, width: view.bounds.width / 3, height: 50)
refreshbtn.center = CGPoint(x: view.bounds.width / 2, y: 100)
refreshbtn.layer.borderWidth = 1
view.addSubview(refreshbtn)
view.addSubview(tableView)
// 通过刷新按钮,产生随机流,保存到randomResult变量中
let randomResult = refreshbtn.rx.tap.asObservable()
.throttle(1, scheduler: MainScheduler.instance) // 如果一秒内点击多次,取最后一次
.startWith(()) // 确保一开始的时候就有值
.flatMapLatest(getRandomResult) // 通过自定义函数转化成随机数
.share(replay: 1) // 确保只发送一次
// 创造数据源,数据源的类型是SectionModel<String, Int>类型
let dataSource = RxTableViewSectionedReloadDataSource
<SectionModel<String, Int>>(
configureCell: {
ds, tv, indexPath, element in
let cell = tv.dequeueReusableCell(withIdentifier: "cell")
cell?.textLabel?.text = "现在的索引是\(indexPath.row),内容为\(element)"
return cell!
}
)
// 绑定
randomResult.bind(to: tableView.rx.items(dataSource: dataSource)).disposed(by: disposeBag)
}
}
加上一个停止按钮,按了以后就不更新了
// ViewController.swift
// RxSwiftTest
//
// Created by travey on 2018/11/5.
// Copyright © 2018年 ZhouShijie. All rights reserved.
import UIKit
import RxSwift
import RxCocoa
import SnapKit
import RxDataSources
class ViewController: UIViewController {
let disposeBag = DisposeBag()
var tableView: UITableView!
var refreshbtn: UIButton! // 创建一个刷新按钮
var stopbtn:UIButton!
// 通过刷新按钮的流,产生随机数
// 自定义函数,返回的类型是一个Observable,这个Observable是一个数组,每个数组装的元素类型是一个SectionModel类型,SectionModel类型里面有两个变量,一个是标题,一个是下面的cell,cell用一个数组展示,并且要求标题是String类型的,cell里面元素的类型是Int类型的
func getRandomResult() -> Observable<[SectionModel<String, Int>]> {
print("正在请求数据......")
let items = Array(repeating: 0, count: 10).map{ _ in
Int(arc4random())
}
let observable = Observable.just([SectionModel(model: "Zhou", items: items)])
return observable.delay(2, scheduler: MainScheduler.instance)
}
override func viewDidLoad() {
// UI设置
tableView = UITableView(frame: CGRect(x: 0, y: 200, width: view.bounds.width, height: view.bounds.height - 200), style: .plain)
tableView!.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
refreshbtn = UIButton()
refreshbtn.setTitle("刷新", for: .normal)
refreshbtn.setTitleColor(UIColor.black, for: .normal)
refreshbtn.frame = CGRect(x: 0, y: 0, width: view.bounds.width / 3, height: 50)
refreshbtn.center = CGPoint(x: view.bounds.width / 2, y: 100)
refreshbtn.layer.borderWidth = 1
view.addSubview(refreshbtn)
view.addSubview(tableView)
stopbtn = UIButton()
stopbtn.setTitle("停止", for: .normal)
stopbtn.setTitleColor(UIColor.black, for: .normal)
stopbtn.frame = CGRect(x: 0, y: 0, width: view.bounds.width / 3, height: 50)
stopbtn.center = CGPoint(x: view.bounds.width / 2, y: 160)
stopbtn.layer.borderWidth = 1
view.addSubview(stopbtn)
// 通过刷新按钮,产生随机流,保存到randomResult变量中
let randomResult = refreshbtn.rx.tap.asObservable()
.throttle(1, scheduler: MainScheduler.instance) // 如果一秒内点击多次,取最后一次
.startWith(()) // 确保一开始的时候就有值
.flatMapLatest(getRandomResult) // 通过自定义函数转化成随机数
.takeUntil(stopbtn.rx.tap) // 如果我按了停止,就停止更新
.share(replay: 1) // 确保只发送一次
// 创造数据源,数据源的类型是SectionModel<String, Int>类型
let dataSource = RxTableViewSectionedReloadDataSource
<SectionModel<String, Int>>(
configureCell: {
ds, tv, indexPath, element in
let cell = tv.dequeueReusableCell(withIdentifier: "cell")
cell?.textLabel?.text = "现在的索引是\(indexPath.row),内容为\(element)"
return cell!
}
)
// 绑定
randomResult.bind(to: tableView.rx.items(dataSource: dataSource)).disposed(by: disposeBag)
}
}