I hereby claim:
- I am groue on github.
- I am groue (https://keybase.io/groue) on keybase.
- I have a public key whose fingerprint is EDC5 4AA4 0D3A 475A DB0E 78B4 2A35 40DD A1C7 3F08
To claim this, I am signing this object:
| func setupDatabase() { | |
| // That "collation" helps us compare person names in a localized case insensitive fashion | |
| let collation = DatabaseCollation.localizedCaseInsensitiveCompare | |
| try! dbQueue.execute( | |
| "CREATE TABLE persons (" + | |
| "id INTEGER PRIMARY KEY, " + | |
| "name TEXT NOT NULL COLLATE \(collation.name), " + | |
| "score INTEGER NOT NULL " + | |
| ")") |
| // MARK: - FetchedRecordsControllerDelegate | |
| extension PersonsViewController : FetchedRecordsControllerDelegate { | |
| func controllerWillChangeRecords<T>(controller: FetchedRecordsController<T>) { | |
| tableView.beginUpdates() | |
| } | |
| func controller<T>(controller: FetchedRecordsController<T>, didChangeRecord record: T, withEvent event:FetchedRecordsEvent) { | |
| switch event { |
| override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { | |
| // Delete the person | |
| let person = personsController.recordAtIndexPath(indexPath) | |
| try! person.delete(dbQueue) | |
| } |
| import UIKit | |
| class PersonEditionViewController: UITableViewController { | |
| var person: Person! | |
| @IBOutlet private weak var nameCell: UITableViewCell! | |
| @IBOutlet private weak var nameTextField: UITextField! | |
| @IBOutlet private weak var scoreCell: UITableViewCell! | |
| @IBOutlet private weak var scoreTextField: UITextField! | |
| // MARK: - Form | |
| extension PersonEditionViewController: UITextFieldDelegate { | |
| override func viewWillAppear(animated: Bool) { | |
| super.viewWillAppear(animated) | |
| nameTextField.becomeFirstResponder() | |
| } | |
| override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { |
| extension PersonEditionViewController { | |
| func applyChanges() { | |
| person.name = nameTextField.text | |
| person.score = scoreTextField.text.flatMap { Int($0) } ?? 0 | |
| } | |
| } |
| // MARK: - Navigation | |
| extension PersonsViewController { | |
| override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { | |
| if segue.identifier == "NewPerson" { | |
| let navigationController = segue.destinationViewController as! UINavigationController | |
| let controller = navigationController.viewControllers.first as! PersonEditionViewController | |
| controller.title = "New Person" | |
| controller.person = Person(name: "", score: 0) |
| class PersonsViewController: UITableViewController { | |
| override func viewDidLoad() { | |
| super.viewDidLoad() | |
| // Configure the navigation bar | |
| navigationItem.rightBarButtonItems = [ | |
| UIBarButtonItem( | |
| barButtonSystemItem: .Add, | |
| target: self, | |
| action: #selector(PersonsViewController.addPerson(_:))), |
| /// A ReadWriteBox grants multiple readers and single-writer guarantees on a value. | |
| final class ReadWriteBox<T> { | |
| var value: T { | |
| get { return read { $0 } } | |
| set { write { $0 = newValue } } | |
| } | |
| init(_ value: T) { | |
| self._value = value | |
| self.queue = DispatchQueue(label: "ReadWriteBox", attributes: [.concurrent]) |
I hereby claim:
To claim this, I am signing this object: