Skip to content

Instantly share code, notes, and snippets.

View groue's full-sized avatar

Gwendal Roué groue

View GitHub Profile
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(_:))),
@groue
groue / ReadWriteBox.swift
Created November 18, 2016 15:43
A ReadWriteBox grants multiple readers and single-writer guarantees on a value.
/// 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])

Keybase proof

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: