Skip to content

Instantly share code, notes, and snippets.

@taichino
Last active May 16, 2018 17:57
Show Gist options
  • Save taichino/60d32c1edc8cd1c7582ed58497e89d72 to your computer and use it in GitHub Desktop.
Save taichino/60d32c1edc8cd1c7582ed58497e89d72 to your computer and use it in GitHub Desktop.
import UIKit
import RxSwift
import RxCocoa
class SimpleTableViewExampleViewController : ViewController, UITableViewDelegate {
@IBOutlet weak var tableView: UITableView!
let itemsObservable = BehaviorRelay(value: (0..<5).map { "\($0)" })
@objc func add() {
let items = itemsObservable.value
addItems(["\(items.count)"])
}
func addItems(_ newItems: [String]) {
let items = itemsObservable.value
itemsObservable.accept(items + newItems)
}
override func viewDidLoad() {
super.viewDidLoad()
navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(add))
itemsObservable
.bind(to: tableView.rx.items(cellIdentifier: "Cell", cellType: UITableViewCell.self)) { (row, element, cell) in
cell.textLabel?.text = "\(element) @ row \(row)"
}
.disposed(by: disposeBag)
}
}
import UIKit
import RxSwift
import RxCocoa
class SimpleTableViewExampleViewController : ViewController, UITableViewDelegate {
@IBOutlet weak var tableView: UITableView!
typealias MySectionModel = AnimatableSectionModel<String, String>
let sectionsObservable = BehaviorRelay(value: [MySectionModel(model: "my section", items: (0..<5).map { "\($0)" })])
@objc func add() {
let sections = sectionsObservable.value
addItems(["\(sections.first!.items.count)"])
}
func addItems(_ newItems: [String]) {
var sections = sectionsObservable.value
sections[0].items += newItems
sectionsObservable.accept(sections)
}
override func viewDidLoad() {
super.viewDidLoad()
navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(add))
let dataSource = RxTableViewSectionedAnimatedDataSource<MySectionModel>(configureCell: { (_, tableView, indexPath, element) in
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") ?? UITableViewCell(style: .default, reuseIdentifier: "Cell")
cell.textLabel?.text = "\(element) @ row \(indexPath.row)"
return cell
})
sectionsObservable
.bind(to: tableView.rx.items(dataSource: dataSource))
.disposed(by: disposeBag)
}
}
import UIKit
import RxSwift
import RxCocoa
typealias MySectionModel = AnimatableSectionModel<String, String>
class MyTableViewModel {
let sectionsObservable = BehaviorRelay(value: [MySectionModel(model: "my section", items: (0..<5).map { "\($0)" })])
@objc func add() {
let sections = sectionsObservable.value
addItems(["\(sections.first!.items.count)"])
}
func addItems(_ newItems: [String]) {
var sections = sectionsObservable.value
sections[0].items += newItems
sectionsObservable.accept(sections)
}
}
class SimpleTableViewExampleViewController : ViewController, UITableViewDelegate {
@IBOutlet weak var tableView: UITableView!
private let viewModel = MyTableViewModel()
override func viewDidLoad() {
super.viewDidLoad()
navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self.viewModel, action: #selector(MyTableViewModel.add))
let dataSource = RxTableViewSectionedAnimatedDataSource<MySectionModel>(configureCell: { (_, tableView, indexPath, element) in
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") ?? UITableViewCell(style: .default, reuseIdentifier: "Cell")
cell.textLabel?.text = "\(element) @ row \(indexPath.row)"
return cell
})
viewModel.sectionsObservable
.bind(to: tableView.rx.items(dataSource: dataSource))
.disposed(by: disposeBag)
}
}
import UIKit
import RxSwift
import RxCocoa
typealias MySectionModel = AnimatableSectionModel<String, String>
class MyTableModel {
let itemsObservable = BehaviorRelay(value: (0..<5).map { "\($0)" })
func add(items: [String]) {
var currentItems = itemsObservable.value
currentItems += items
itemsObservable.accept(currentItems)
}
}
class MyTableViewModel {
let sectionsObservable: BehaviorRelay<[MySectionModel]>
private let model: MyTableModel
private let disposeBag = DisposeBag()
init(model: MyTableModel) {
self.model = model
self.sectionsObservable = BehaviorRelay(value: [MySectionModel(model: "my section", items: model.itemsObservable.value)])
model.itemsObservable.subscribe { [unowned self] event in
var sections = self.sectionsObservable.value
if let items = event.element {
sections[0].items = items
self.sectionsObservable.accept(sections)
}
}.disposed(by: disposeBag)
}
@objc func add() {
let sections = sectionsObservable.value
model.add(items: ["\(sections.first!.items.count)"])
}
}
class SimpleTableViewExampleViewController : ViewController, UITableViewDelegate {
@IBOutlet weak var tableView: UITableView!
private let viewModel = MyTableViewModel(model: MyTableModel())
override func viewDidLoad() {
super.viewDidLoad()
navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: viewModel, action: #selector(MyTableViewModel.add))
let dataSource = RxTableViewSectionedAnimatedDataSource<MySectionModel>(configureCell: { (_, tableView, indexPath, element) in
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") ?? UITableViewCell(style: .default, reuseIdentifier: "Cell")
cell.textLabel?.text = "\(element) @ row \(indexPath.row)"
return cell
})
viewModel.sectionsObservable
.bind(to: tableView.rx.items(dataSource: dataSource))
.disposed(by: disposeBag)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment