Upgrade to Pro — share decks privately, control downloads, hide ads and more …

The Pledge, the Turn, the Prestige: Keeping in Touch With Swift

The Pledge, the Turn, the Prestige: Keeping in Touch With Swift

Presented on 18.01.2017

Bas Broek

January 18, 2018
Tweet

More Decks by Bas Broek

Other Decks in Programming

Transcript

  1. THE PLEDGE, THE TURN,
    THE PRESTIGE:
    KEEPING IN TOUCH WITH SWIFT
    1 — Bas Broek, 18.01.2017

    View Slide

  2. !
    THE PLEDGE
    THE SETUP: SWIFT 4
    2 — Bas Broek, 18.01.2017

    View Slide

  3. BEFORE WE START...
    WE STILL HAVE SOME
    SWIFT 3 FRAMEWORKS
    !"
    3 — Bas Broek, 18.01.2017

    View Slide

  4. SWIFT 4
    > Codable
    > String is a collection again
    > "Better" imterpretation of grapheme clusters
    > Multi-Line String Literals
    > Dictionary and Set enhancements
    > Access Control ( )
    > Keypaths (some are already using it!)
    > Standard Library Improvements
    > ... and more to come
    4 — Bas Broek, 18.01.2017

    View Slide

  5. Codable
    struct Person: Codable {
    public let name: String
    }
    let person = Person(name: "Bas")
    let payload = try JSONEncoder().encode(person)
    let string = String(data: payload, encoding: .utf8) // {"name":"Bas"}
    let decodedPerson = try JSONDecoder().decode(Person.self, from: payload) // Person(name: "Bas")
    5 — Bas Broek, 18.01.2017

    View Slide

  6. String
    let world = "hello, world".count // 12
    let family = "
    !
    ".count // 1
    let multiline = """
    {
    "hello": "world",
    "multiple": [
    "one": 1,
    "two": 2
    ]
    }
    """
    6 — Bas Broek, 18.01.2017

    View Slide

  7. Dictionary & Set
    let source = "hello, world"
    var frequencies: [Character: Int] = [:]
    source.map { frequencies[$0, default: 0] += 1 }
    frequencies // ["w": 1, "r": 1, "e": 1, "o": 2, "l": 3, ",": 1, " ": 1, "h": 1, "d": 1]
    let x = frequencies["a", default: 0] // Does not store `0` at `a`;
    let y = frequencies["a"] ?? 0 // these lines are equivalent
    let numbers = ["one": 1, "two": 2, "three": 3, "four": 4]
    let strings = numbers.mapValues(String.init) // ["three": "3", "four": "4", "one": "1", "two": "2"]
    let evens = numbers.filter { $0.value % 2 == 0 } // ["four": 4, "two": 2]
    7 — Bas Broek, 18.01.2017

    View Slide

  8. ACCESS CONTROL
    struct Song {
    let artist: String
    let name: String
    private var _description: String {
    return "\(artist) - \(name)"
    }
    }
    extension Song: CustomStringConvertible {
    var description: String {
    return _description
    }
    }
    Song(artist: "Rick Astley", name: "Never Gonna Give You Up") // OK!
    8 — Bas Broek, 18.01.2017

    View Slide

  9. KEYPATHS
    See the code here.
    stateModel.observe(\.currentState, options: [.new]) { [weak self] _, change in
    if change.newValue == nil { return }
    self?.configureSectionIndexBarForCurrentState()
    }
    9 — Bas Broek, 18.01.2017

    View Slide

  10. STAND LIBRARY IMPROVEMENTS
    var collection = ["a", "b"]
    collection.swapAt(0, 1) // ["b", "a"]
    protocol P {}
    struct S: P {}
    class C: P {}
    let u: AnyObject & P = C() // Compiles successfully
    10 — Bas Broek, 18.01.2017

    View Slide

  11. THERE'S A
    PLAYGROUND
    FOR THAT
    ... AND IT'S ON GITHUB
    11 — Bas Broek, 18.01.2017

    View Slide

  12. !
    THE TURN
    THE PERFORMANCE: SWIFT 5
    12 — Bas Broek, 18.01.2017

    View Slide

  13. SWIFT 5
    > ABI Stability (Application Binary Interface)
    > (Start on) Memory Ownership Model
    > (Stricter) Source Stability
    > String Ergonomics
    > Improvements to the Standard Library
    > Foundation Improvements
    > Syntactic additions
    > Laying the groundwork for a new Concurrency Model
    > Proposals need a working implementation
    > ... and more?
    13 — Bas Broek, 18.01.2017

    View Slide

  14. !
    THE PRESTIGE
    THE EFFECT: SWIFT WEEKLY BRIEF
    14 — Bas Broek, 18.01.2017

    View Slide

  15. SWIFT WEEKLY BRIEF
    > What is it?
    > I will be curating it starting 25.01.2018 (please do *not*
    communicate until then)
    > I would

    your input, but don't feel any obligations!
    > Proofreading, providing interesting links or (help) writing
    an issue
    > It is Open Source on GitHub
    15 — Bas Broek, 18.01.2017

    View Slide

  16. The newsletter is definitely a
    valuable resource for the
    community, and if you want to help
    it live on, it will have a huge
    impact. There are thousands of
    followers and subscribers.
    — Jesse Squires
    16 — Bas Broek, 18.01.2017

    View Slide

  17. THANKS
    17 — Bas Broek, 18.01.2017

    View Slide

  18. REFERENCES
    SWIFT 4
    > SE-0166: Swift Archival & Serialization
    > SE-0163: String Revision
    > SE-0165: Dictionary & Set Enhancements
    > SE-0169: Improve Interaction Between private Declarations and Extensions
    > SE-0161: Smart KeyPaths: Better Key-Value Coding for Swift
    > SE-0168: Multi-Line String Literals
    > SE-0173: Add MutableCollection.swapAt(_:_:)
    > SE-0156: Class and Subtype Existentials
    > SE-0185: Synthesizing Equatable and Hashable conformance
    > What's New in Swift 4?
    18 — Bas Broek, 18.01.2017

    View Slide

  19. REFERENCES
    SWIFT 5
    > What's up With Swift 5?
    > Primary Focus: ABI Stability
    19 — Bas Broek, 18.01.2017

    View Slide