Skip to content

Instantly share code, notes, and snippets.

@davidbjames
Last active May 27, 2016 19:18
Show Gist options
  • Save davidbjames/22a0b3f8f5af0056240d9431b52416bf to your computer and use it in GitHub Desktop.
Save davidbjames/22a0b3f8f5af0056240d9431b52416bf to your computer and use it in GitHub Desktop.
// The API
func getPeople() -> Observable<[Person]> {
return Observable.create { (observer: AnyObserver<[Person]>) -> Disposable in
self.getPeople({ (people) in
guard people != nil else {
return
}
observer.onNext(people!)
}) { (error) in
observer.onError(error)
}
return AnonymousDisposable {
}
}
}
// Person view controller
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
// get all people
let request = API.instance.getPeople()
request.subscribeNext { (people) in
self.data = people
self.filteredData = people
self.tableView.reloadData()
}
request.subscribeError { (errorType) in
// handle error
print(errorType)
}
// handle search (local data)
searchBar
.rx_text
.throttle(0.5, scheduler: MainScheduler.instance)
.distinctUntilChanged()
.subscribeNext { (text) in
if text.characters.count > 0 {
self.filteredData = self.data?.filter({ (person:Person) -> Bool in
person.name.hasPrefix(text)
})
} else {
// return to original data
self.filteredData = self.data
}
self.tableView.reloadData()
}
.addDisposableTo(rx_disposeBag)
// handle tap to view person details/strengths
tableView
.rx_itemSelected
.subscribeNext { (indexPath) in
self.performSegueWithIdentifier("showDetailViewController", sender: indexPath)
}
}
// Strengths view controller
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
detailHeading.text = person.name
// handle close modal tap
closeButton.rx_tap
.subscribeNext {
self.dismissViewControllerAnimated(true, completion: nil)
}
.addDisposableTo(rx_disposeBag)
// bind strengths to table view
let strengths = Observable.just(person.strengths)
strengths
.bindTo(
tableView.rx_itemsWithCellIdentifier("dataCell", cellType: UITableViewCell.self)
) { (row, strength:Strength, cell) in
cell.textLabel?.text = strength.name
}
.addDisposableTo(rx_disposeBag)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment