Lock in $30 Savings on PRO—Offer Ends Soon! ⏳

Statically-typed Swifty APIs

Statically-typed Swifty APIs

A talk from NSSpain 2016

Avatar for Radek Pietruszewski

Radek Pietruszewski

September 15, 2016
Tweet

More Decks by Radek Pietruszewski

Other Decks in Programming

Transcript

  1. @radexp • radex.io Defaults.integer(forKey: "launchCount") Defaults.set("red", forKey: "color") let dictionary

    = ["launchCount": 10] dictionary["launchCount"] dictionary["color"] = "red"
  2. @radexp • radex.io extension UserDefaults { subscript(key: String) -> AnyObject?

    { get { return object(forKey: key) } set { set(newValue, forKey: key) } } } Defaults["color"] Defaults["color"] = "red"
  3. @radexp • radex.io class Proxy { var string: String? {

    return defaults.string(forKey: key) } var int: Int { return defaults.integer(forKey: key) } }
  4. @radexp • radex.io extension UserDefaults { subscript(key: String) -> Any?

    { set { if let v = newValue as? String { set(v, forKey: key) } else if let v = newValue as? Int { set(v, forKey: key) } } } }
  5. @radexp • radex.io func += (proxy: UserDefaults.Proxy, b: Int) {

    let a = proxy.defaults[proxy.key].intValue proxy.defaults[proxy.key] = a + b }
  6. @radexp • radex.io class DefaultsKey<ValueType> { let key: String }

    let colorKey = DefaultsKey<String?>("color")
  7. @radexp • radex.io let colorKey = DefaultsKey<String?>("color") extension UserDefaults {

    subscript(key: DefaultsKey<String?>) -> String? { get { return string(forKey: key.key) } set { set(newValue, forKey: key.key) } } }
  8. @radexp • radex.io Defaults[colorKey] = "green" Defaults[colorKey] // => "green"

    : String? let colorKey = DefaultsKey<String?>("color")
  9. @radexp • radex.io Defaults[colorKey] = "green" Defaults[colorKey] // => "green"

    : String? let colorKey = DefaultsKey<String?>("color")
  10. @radexp • radex.io extension DefaultsKeys { static let color =

    DefaultsKey<String>("color") } Defaults[.color] = "red"
  11. @radexp • radex.io extension DefaultsKeys { static let color =

    DefaultsKey<NSColor?>("color") } Defaults[.color] // => nil Defaults[.color] = .white Defaults[.color] // => w 1.0, a 1.0 Defaults[.color]?.whiteComponent // => 1.0
  12. @radexp • radex.io extension DefaultsKeys { static let username =

    DefaultsKey<String?>("username") static let launchCount = DefaultsKey<Int>("launchCount") static let libraries = DefaultsKey<[String]>("libraries") static let color = DefaultsKey<NSColor?>("color") }