Skip to content

Instantly share code, notes, and snippets.

@koke
Created April 11, 2016 09:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save koke/bba95f0d0a8706f973c2d0dc6208d25d to your computer and use it in GitHub Desktop.
Save koke/bba95f0d0a8706f973c2d0dc6208d25d to your computer and use it in GitHub Desktop.
class ViewController: UIViewController, UITextFieldDelegate {
private weak var tableView: UITableView!
private weak var textField: UITextField!
private lazy var throttle: Throttle<String> = Throttle(timeout: 0.3) { (query) in
self.runFetch(query)
}
private let switcher = SwitchToLatest()
private var results = [String]() {
didSet {
tableView.reloadData()
}
}
private var currentText = "" {
didSet {
if currentText.characters.count < 4 {
throttle.cancel()
}
else {
throttle.input(currentText)
}
}
}
override func viewDidLoad() {
textField.delegate = self
}
func textDidChange(sender: AnyObject) {
if currentText != textField.text {
currentText = textField.text!
}
}
private func runFetch(query: String) {
let fetcher = Fetcher(query: query) { result, error in
if let error = error {
//Handle it.
print("Error \(error)")
}
else if let result = result {
self.results = result.map { oneResult in return oneResult.text }
}
}
switcher.switchTo(fetcher)
}
@IBAction func refresh(sender: AnyObject) {
throttle.cancel()
runFetch(currentText)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment