Last active
May 27, 2016 19:18
-
-
Save davidbjames/22a0b3f8f5af0056240d9431b52416bf to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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