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: