Slide 1

Slide 1 text

SWIFT CLASS + HACKDAY

Slide 2

Slide 2 text

The set up

Slide 3

Slide 3 text

THE SETUP Xcode6-Beta3

Slide 4

Slide 4 text

WHO AM I?

Slide 5

Slide 5 text

JP SIMARD @SIMJP REALM.IO

Slide 6

Slide 6 text

TODAY !

Slide 7

Slide 7 text

CLASS 1. LEARN ABOUT SWIFT 2. BUILD AN APP 3. QUESTIONS

Slide 8

Slide 8 text

WHY SWIFT > OBJC? ▸ Type safety & inference ▸ Closures ▸ Tuples ▸ Super-Enums ▸ Functional programming ▸ Generics

Slide 9

Slide 9 text

Q: WHAT DOES IT LOOK LIKE?

Slide 10

Slide 10 text

TYPE SAFETY & INFERENCE let anInt = 3 let aFloat = 0.1416 var pi = anInt + aFloat // Compile warning pi = 3 + 0.1416 // Compiles: number literals are untyped LIKE RUST & SCALA

Slide 11

Slide 11 text

CLOSURES func backwards(s1: String, s2: String) -> Bool { return s1 > s2 } sort(["b", "a"], backwards) // => ["a", "b"] SWIFT CLOSURES ! OBJC BLOCKS

Slide 12

Slide 12 text

TUPLES let http404Error = (404, "Not Found") LIKE HASKELL & SCALA

Slide 13

Slide 13 text

SUPER-ENUMS* *OK, NOT EXACTLY THE CORRECT TECHNICAL TERM

Slide 14

Slide 14 text

enum Suit { case Spades, Hearts, Diamonds, Clubs func simpleDescription() -> String { switch self { case .Spades: return "Spades" case .Hearts: return "Hearts" case .Diamonds: return "Diamonds" case .Clubs: return "Clubs" } } }

Slide 15

Slide 15 text

FUNCTIONAL PROGRAMMING let numbers = [1, 5, 3, 12, 2] numbers.map { (number: Int) -> Int in return 3 * number } // => [3, 15, 9, 36, 6] numbers.filter {$0 % 2 == 0} // => [12, 2] LIKE HASKELL, SCALA & MANY OTHERS

Slide 16

Slide 16 text

GENERICS LIKE... UH... EVERY MODERN LANGUAGE!

Slide 17

Slide 17 text

// Reimplement the Swift standard // library's optional type enum OptionalValue { case None case Some(T) } var maybeInt: OptionalValue = .None maybeInt = .Some(100) // Specialized Array var letters: [Array] letters = ["a"]

Slide 18

Slide 18 text

Q: WHAT HAPPENED TO MY BELOVED *

Slide 19

Slide 19 text

Q: WHAT HAPPENED TO MY BELOVED *? ▸ concepts are still there: reference types and value types ▸ pointers still exist to interact with C APIs: UnsafePointer, etc.

Slide 20

Slide 20 text

Q: WHAT HAPPENED TO MY BELOVED *? C APIS ARE STILL USABLE import Foundation import Security let secret = "Top Secret".dataUsingEncoding(NSUTF8StringEncoding) let dict = [kSecClass as String: kSecClassGenericPassword, kSecAttrService as String: "MyService", kSecAttrAccount as String: "Some Account", kSecValueData as String: secret] as NSDictionary let status = SecItemAdd(dict as CFDictionaryRef, nil)

Slide 21

Slide 21 text

JAZZY GITHUB.COM/REALM/JAZZY A SOULFUL WAY TO GENERATE DOCS FOR SWIFT & OBJECTIVE-C

Slide 22

Slide 22 text

LINKS () ▸ Official Swift website ▸ The Swift Programming Language Book ▸ WWDC Videos ▸ WWDC Sample Code ▸ Xcode 6 (and other resources) Free Apple Developer Account Required

Slide 23

Slide 23 text

LINKS (!) ▸ This talk: github.com/jpsim/talks ▸ Jay Freeman's AltConf talk: debugging your (Swift) apps with cycript ▸ ObjC/Swift doc generator: github.com/realm/jazzy ▸ Evan Swick: Inside Swift ▸ Swift on StackOverflow

Slide 24

Slide 24 text

LET'S BUILD A TO-DO APP!

Slide 25

Slide 25 text

THANK YOU!

Slide 26

Slide 26 text

Hackday().questions?.askThem!

Slide 27

Slide 27 text

Hackday().questions?.askThem! JP SIMARD, @SIMJP, REALM.IO