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

Primi passi con Swift - Emanuele Fiumara

Primi passi con Swift - Emanuele Fiumara

Swift è il nuovo arrivato tra i linguaggi di programmazione per Cocoa e Cocoa Touch. Analizziamo insieme i benefici che porta con sé e i metodi di integrazione con Objective-C.

weLaika

June 11, 2015
Tweet

More Decks by weLaika

Other Decks in Programming

Transcript

  1. Emanuele Fiumara Sviluppatore iOS e Web. Mentor del CoderDojo di

    Torino. Presto iOS developer Testa Digital Hub. emanuele.fi[email protected]
  2. • Panoramica sulle piattaforme Cocoa e Cocoa Touch • Selezione

    di feature del linguaggio Swift • Integrazione con Objective-C • Analisi di un’app iOS sviluppata Agenda
  3. Il linguaggio • Sviluppato principalmente da Chris Lattner dal 2010

    • Presentato alla WWDC 2014 ed entrato subito tra i linguaggi compatibili con Cocoa e Cocoa Touch • Compatibilità con iOS 7+ e MacOS 10.9+ • Reazioni varie e contrastanti nella comunità di sviluppatori
  4. • Multiparadigma • Stesso runtime di Objective-C • Non compatibile

    con C • Sviluppato per rimpiazzare Objective-C • Sviluppato per essere familiare agli sviluppatori Objective-C ma anche semplice per nuovi sviluppatori
  5. Type inference let name = "Tony Stark" var currentMarkArmor =

    6 let isShy = false // inferred as String // inferred as Int // inferred as Bool
  6. Unicode characters let calls = ["": "muu", "": "bau", "":

    "miao"] let transports = ["", "✈", "", ""] let π = 3.1415927
  7. Optionals let numberOfLegs = ["ant": 6, "snake": 0, "elephant": 4]

    let possibleLegCount: Int? = numberOfLegs["aardvark"]
  8. Optional binding if let legCount = possibleLegCount { let legCount:

    Int = possibleLegCount! println("An aardvark has \(legCount) legs") } else { println("aardvark not found!") }
  9. Return di valori multipli func refreshWebPage() -> (Int, String) {

    // ... refresh ... return (200, "Success") }
  10. Tuple (3.79, 3.99, 4.19, 3.12) // (Double, Double, Double, Double)

    (404, "Not found") // (Int, String) (2, "banana", 0.72) // (Int, String, Double)
  11. Decomposizione di tuple func refreshWebPage() -> (Int, String) { //

    ... refresh ... return (200, "Success") } let (statusCode, statusString) = refreshWebPage() println("Response code: \(statusCode), status: \ (statusString)")
  12. Tuple Named Value func namedRefreshWebPage() -> (code: Int, message: String)

    { // ... refresh ... return (200, "Success") } let status = namedRefreshWebPage() println("Response code: \(status.code), status: \ (status.message)”)
  13. Closure: esempio pratico let names = ["Steve", "Tony", "Bruce", "Natasha"]

    // Function parameter version func backwards(s1: String, s2: String) -> Bool { return s1 > s2 } var reversed = sorted(names, backwards) // pure closure version reversed = sorted(names, { (s1: String, s2: String) -> Bool in return s1 > s2 })
  14. Closure: esempio pratico // Type infer dalla definizione del metodo

    sorted reversed = sorted(names, { s1, s2 in return s1 > s2 } ) // Singola istruzione possiamo omettere return reversed = sorted(names, { s1, s2 in s1 > s2 } ) // Trailing closure reversed = sorted(names){ s1, s2 in s1 > s2 }
  15. Extension extension Double { var km: Double { return self

    * 1_000.0 } var m: Double { return self } var cm: Double { return self / 100.0 } var mm: Double { return self / 1_000.0 } var ft: Double { return self / 3.28084 } } let oneInch = 25.4.mm println("One inch is \(oneInch) meters") let threeFeet = 3.ft println("Three feet is \(threeFeet) meters")
  16. Il presente • Quindi Objective-C non ci serve più? •

    Cominciando ora, posso fare qualunque cosa con Swift e ignorare l’esistenza di Objective-C?
  17. • CocoaPods e Carthage sono pronti • Reactive Cocoa (ci

    stanno lavorando) • Le performance sono ancora, in certi casi, inferiori a Objective-C • Molte altre utili librerie, soprattutto lato View non hanno un porting Il presente
  18. Integrazione • Serve poter usare il nuovo codice Swift in

    classi Objective-C • Serve poter usare codice Objective-C già esistente in Swift
  19. Il futuro Lo stanno annunciando alla WWDC2015 mentre io sto

    parlando, grazie per aver ascoltato questo keynote anziché il loro