SlideShare a Scribd company logo
1 of 24
Download to read offline
Swift
A nova linguagem de
programação da Apple
Juliana Chahoud
Juliana Chahoud
Apple anuncia nova
linguagem de programação!
+- 20 dias de experiência
com Swift
Características Swift
• Moderna, Rápida e Segura
• iOS 7 e 8
• OS X 10.9 e 10.10
Xcode 6 - Beta2
Projeto ObjC x Swift
• Swift não possui arquivos header (.h)
• main.m não é mais necessário
X
Não é necessário criar um projeto
para “experimentar” o Swift
Playground REPL (Read-Eval-Print-Loop)
Demo: REPL
Como praticar de fato
• Criar um cenário comum de um app simples,
interagindo com Cocoa e Objective-C:
• Utilizar alguma API - NSURLConnection
• TableView e célula customizada
• Integração com Cocoapods e Obj-C
• Aproveitando a onda do momento: App Copa do Mundo
Estudo de caso: App Copa do
Mundo
Criação do projeto WorldCup
Demo: app Copa do Mundo
https://github.com/jchahoud/WorldCup-Swift.git
AppDelegate
/*
In Obj-C:
#import <UIKit/UIKit.h>
*/
import UIKit
/*
"Replace" the main file and UIApplicationMain instance creation
In Obj-C (in main.m):
UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
*/
@UIApplicationMain
/*
In Obj-C:
@interface AppDelegate : UIResponder <UIApplicationDelegate>
*/
class AppDelegate: UIResponder, UIApplicationDelegate {
/*
In Obj-C:
@property (strong, nonatomic) UIWindow *window;
*/
var window: UIWindow?
/*
In Obj-C
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary
*)launchOptions {
*/
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?)
-> Bool {
return true
}
Storyboard Universal
API: resultado de jogos
Classe Match: Swift x Obj-C
import Foundation
/*
In Obj-C:
@interface Match : NSObject
*/
class Match {
/*
In Obj-C:
@property (nonatomic,strong) NSString* c_AwayLogoImage;
*/
var c_AwayLogoImage:String?
var c_AwayTeam_en:String?
var c_HomeLogoImage:String?
var c_HomeTeam_en:String?
var c_Stadium:String?
var n_AwayGoals:Int?
var n_HomeGoals:Int?
/*
In Obj-C:
-(id) initWithDictionary:(NSDictionary*)dict {
self = [super init];
if (self){
_c_AwayLogoImage = dict[@"c_AwayLogoImage"];
//....
}
return self;
}
*/
init(dict: NSDictionary!) {
c_AwayLogoImage = dict["c_AwayLogoImage"] as? String
c_AwayTeam_en = dict["c_AwayTeam_en"] as? String
c_HomeLogoImage = dict["c_HomeLogoImage"] as? String
c_HomeTeam_en = dict["c_HomeTeam_en"] as? String
c_Stadium = dict["c_Stadium"] as? String
n_AwayGoals = dict["n_AwayGoals"] as? Int
n_HomeGoals = dict["n_HomeGoals"] as? Int
}
}
Subclasse de UITableViewCell
import UIKit
class MatchCell: UITableViewCell {
@IBOutlet var homeTeam: UILabel
@IBOutlet var homeGoals: UILabel
@IBOutlet var homeLogoImage: UIImageView
@IBOutlet var awayTeam: UILabel
@IBOutlet var awayGoals: UILabel
@IBOutlet var awayLogoImage: UIImageView
@IBOutlet var stadiums: UILabel
func configCell (match: Match)->Void
{
//load teams names and stadium
homeTeam.text = match.c_HomeTeam_en
awayTeam.text = match.c_AwayTeam_en
stadiums.text = match.c_Stadium
//load team goals unwrapping the optionals
if let goals = match.n_HomeGoals
{
homeGoals.text = "(goals)"
}
if let goals = match.n_AwayGoals
{
awayGoals.text = "(goals)"
}
//lazy images loading with SDWebImage
homeLogoImage.setImageWithURL(NSURL(string:match.c_HomeLogoImage))
awayLogoImage.setImageWithURL(NSURL(string:match.c_AwayLogoImage))
}
}
API: informações de jogos
let apiFifaUrl = NSURL (string: "http://live.mobileapp.fifa.com/api/wc/matches")
var request:NSURLRequest = NSURLRequest (URL: apiFifaUrl)
NSURLConnection.sendAsynchronousRequest (request,
queue: NSOperationQueue.mainQueue(),
completionHandler:{
(response: NSURLResponse!,
data: NSData!,
error: NSError!) -> Void in
})
/*
...
*/
Integração com CocoaPods
Visualização 3D das camadas UI
Mais características do Swift
• deinit: chamado antes do objeto ser
“deallocated”
• Gerenciamento de memória: Strong, Weak, e
Unowned
• Propriedades:
• Podem ter getters e setters
• pode-se usar willSet e didSet
Mais características do Swift
• Funções:
• podem ser aninhadas
• podem receber número variável de parâmetros (numbers:
Int...)
• podem receber / retornar outras funções
• enum e struct podem ter funções
• extension (category) adiciona funcionalidade a um tipo existente
• Generics:
• func swapTwoValues<T>(inout a: T, inout b: T)
Mais Informações
Documentação
The Swift Programming Language
Using Swift with Cocoa and Objective-C
https://developer.apple.com/swift/
Vídeos
WWDC 2014
https://developer.apple.com/videos/wwdc/2014/
Sample Code
https://developer.apple.com/library/prerelease/ios/navigation/
Obrigada!
Dúvidas?
Juliana Chahoud
jchahoud@icloud.com
@jchahoud
http://jchahoud.com

More Related Content

Similar to Swift, a nova linguagem de programação da Apple (CocoaHeads Sao Paulo)

Desenvolvendo para iOS com Cocoa-Touch
Desenvolvendo para iOS com Cocoa-TouchDesenvolvendo para iOS com Cocoa-Touch
Desenvolvendo para iOS com Cocoa-TouchCampus Party Brasil
 
Testes Automatizados e o iOS
Testes Automatizados e o iOSTestes Automatizados e o iOS
Testes Automatizados e o iOSRicardo Valeriano
 
Aula02 android hands_on
Aula02 android hands_onAula02 android hands_on
Aula02 android hands_onRoberson Alves
 
Introdução à Programação para iPhone (iOS)
Introdução à Programação para iPhone (iOS)Introdução à Programação para iPhone (iOS)
Introdução à Programação para iPhone (iOS)Jorge Cardoso
 
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)Carlos Duarte do Nascimento
 
Desenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App EngineDesenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App EngineCampus Party Brasil
 
Escreva aplicações web assíncronas com python3 + tornado
Escreva aplicações web assíncronas com python3 + tornadoEscreva aplicações web assíncronas com python3 + tornado
Escreva aplicações web assíncronas com python3 + tornadoWilson Júnior
 
Introdução ao jquery
Introdução ao jqueryIntrodução ao jquery
Introdução ao jqueryYuri Costa
 
Introdução à Programação Web com Angular
Introdução à Programação Web com AngularIntrodução à Programação Web com Angular
Introdução à Programação Web com AngularElmano Cavalcanti
 
Angular 2, TypeScript e Além
Angular 2, TypeScript e AlémAngular 2, TypeScript e Além
Angular 2, TypeScript e AlémAndre Baltieri
 
Introducao ao Desenvolvimento iOS
Introducao ao Desenvolvimento iOSIntroducao ao Desenvolvimento iOS
Introducao ao Desenvolvimento iOSDiogo Costa
 
Apresentacao android por Júlio Cesar Bueno Cotta
Apresentacao android por Júlio Cesar Bueno CottaApresentacao android por Júlio Cesar Bueno Cotta
Apresentacao android por Júlio Cesar Bueno CottaGPrimola
 
introdução a visão compuutacional com opencv e python
introdução a visão compuutacional com opencv e pythonintrodução a visão compuutacional com opencv e python
introdução a visão compuutacional com opencv e pythonwhanderley freitas
 

Similar to Swift, a nova linguagem de programação da Apple (CocoaHeads Sao Paulo) (20)

Kotlin first
Kotlin firstKotlin first
Kotlin first
 
Caelum Day In Rio
Caelum Day In RioCaelum Day In Rio
Caelum Day In Rio
 
Desenvolvendo para iOS com Cocoa-Touch
Desenvolvendo para iOS com Cocoa-TouchDesenvolvendo para iOS com Cocoa-Touch
Desenvolvendo para iOS com Cocoa-Touch
 
Desenvolvimento iOS
Desenvolvimento iOSDesenvolvimento iOS
Desenvolvimento iOS
 
Mobile conf
Mobile confMobile conf
Mobile conf
 
Testes Automatizados e o iOS
Testes Automatizados e o iOSTestes Automatizados e o iOS
Testes Automatizados e o iOS
 
Aula02 android hands_on
Aula02 android hands_onAula02 android hands_on
Aula02 android hands_on
 
Backbone.js
Backbone.jsBackbone.js
Backbone.js
 
Introdução à Programação para iPhone (iOS)
Introdução à Programação para iPhone (iOS)Introdução à Programação para iPhone (iOS)
Introdução à Programação para iPhone (iOS)
 
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
 
Desenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App EngineDesenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App Engine
 
Escreva aplicações web assíncronas com python3 + tornado
Escreva aplicações web assíncronas com python3 + tornadoEscreva aplicações web assíncronas com python3 + tornado
Escreva aplicações web assíncronas com python3 + tornado
 
Introdução ao jquery
Introdução ao jqueryIntrodução ao jquery
Introdução ao jquery
 
OOP ObjC
OOP ObjCOOP ObjC
OOP ObjC
 
Introdução à Programação Web com Angular
Introdução à Programação Web com AngularIntrodução à Programação Web com Angular
Introdução à Programação Web com Angular
 
Angular 2, TypeScript e Além
Angular 2, TypeScript e AlémAngular 2, TypeScript e Além
Angular 2, TypeScript e Além
 
Introducao ao Desenvolvimento iOS
Introducao ao Desenvolvimento iOSIntroducao ao Desenvolvimento iOS
Introducao ao Desenvolvimento iOS
 
Python Para Maemo
Python Para MaemoPython Para Maemo
Python Para Maemo
 
Apresentacao android por Júlio Cesar Bueno Cotta
Apresentacao android por Júlio Cesar Bueno CottaApresentacao android por Júlio Cesar Bueno Cotta
Apresentacao android por Júlio Cesar Bueno Cotta
 
introdução a visão compuutacional com opencv e python
introdução a visão compuutacional com opencv e pythonintrodução a visão compuutacional com opencv e python
introdução a visão compuutacional com opencv e python
 

More from Juliana Chahoud

Usando React Native & Multi Módulos para Escalar App Creditas
Usando React Native & Multi Módulos para Escalar App CreditasUsando React Native & Multi Módulos para Escalar App Creditas
Usando React Native & Multi Módulos para Escalar App CreditasJuliana Chahoud
 
[Cocoaheads Conference:2018] Além de prints e breakpoints: truques para um De...
[Cocoaheads Conference:2018] Além de prints e breakpoints: truques para um De...[Cocoaheads Conference:2018] Além de prints e breakpoints: truques para um De...
[Cocoaheads Conference:2018] Além de prints e breakpoints: truques para um De...Juliana Chahoud
 
Desenvolvimento de Apps Mobile - Tendências para 2018
Desenvolvimento de Apps Mobile - Tendências para 2018Desenvolvimento de Apps Mobile - Tendências para 2018
Desenvolvimento de Apps Mobile - Tendências para 2018Juliana Chahoud
 
Programação Reativa e Funcional e extensões para PHP
Programação Reativa e Funcional e extensões para PHPProgramação Reativa e Funcional e extensões para PHP
Programação Reativa e Funcional e extensões para PHPJuliana Chahoud
 
Desenvolvimento para experiências em real time com foco na segunda tela
Desenvolvimento para experiências em real time com foco na segunda telaDesenvolvimento para experiências em real time com foco na segunda tela
Desenvolvimento para experiências em real time com foco na segunda telaJuliana Chahoud
 
Usando o Twitter na Internet das Coisas - #WebBR2016
Usando o Twitter  na Internet das Coisas - #WebBR2016Usando o Twitter  na Internet das Coisas - #WebBR2016
Usando o Twitter na Internet das Coisas - #WebBR2016Juliana Chahoud
 
Microservices: Utilizando o Twitter como Plataforma
Microservices: Utilizando o Twitter como PlataformaMicroservices: Utilizando o Twitter como Plataforma
Microservices: Utilizando o Twitter como PlataformaJuliana Chahoud
 
Integrações de APIs do Google no iOS (DevFest NE e SP)
Integrações de APIs do Google no iOS (DevFest NE e SP)Integrações de APIs do Google no iOS (DevFest NE e SP)
Integrações de APIs do Google no iOS (DevFest NE e SP)Juliana Chahoud
 
MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Intere...
MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Intere...MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Intere...
MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Intere...Juliana Chahoud
 
Dissertação de Mestrado - Planejamento para Serviços Web Semânticos
Dissertação de Mestrado - Planejamento para Serviços Web SemânticosDissertação de Mestrado - Planejamento para Serviços Web Semânticos
Dissertação de Mestrado - Planejamento para Serviços Web SemânticosJuliana Chahoud
 
Planejamento para Serviços Web Semânticos
Planejamento para Serviços Web SemânticosPlanejamento para Serviços Web Semânticos
Planejamento para Serviços Web SemânticosJuliana Chahoud
 

More from Juliana Chahoud (11)

Usando React Native & Multi Módulos para Escalar App Creditas
Usando React Native & Multi Módulos para Escalar App CreditasUsando React Native & Multi Módulos para Escalar App Creditas
Usando React Native & Multi Módulos para Escalar App Creditas
 
[Cocoaheads Conference:2018] Além de prints e breakpoints: truques para um De...
[Cocoaheads Conference:2018] Além de prints e breakpoints: truques para um De...[Cocoaheads Conference:2018] Além de prints e breakpoints: truques para um De...
[Cocoaheads Conference:2018] Além de prints e breakpoints: truques para um De...
 
Desenvolvimento de Apps Mobile - Tendências para 2018
Desenvolvimento de Apps Mobile - Tendências para 2018Desenvolvimento de Apps Mobile - Tendências para 2018
Desenvolvimento de Apps Mobile - Tendências para 2018
 
Programação Reativa e Funcional e extensões para PHP
Programação Reativa e Funcional e extensões para PHPProgramação Reativa e Funcional e extensões para PHP
Programação Reativa e Funcional e extensões para PHP
 
Desenvolvimento para experiências em real time com foco na segunda tela
Desenvolvimento para experiências em real time com foco na segunda telaDesenvolvimento para experiências em real time com foco na segunda tela
Desenvolvimento para experiências em real time com foco na segunda tela
 
Usando o Twitter na Internet das Coisas - #WebBR2016
Usando o Twitter  na Internet das Coisas - #WebBR2016Usando o Twitter  na Internet das Coisas - #WebBR2016
Usando o Twitter na Internet das Coisas - #WebBR2016
 
Microservices: Utilizando o Twitter como Plataforma
Microservices: Utilizando o Twitter como PlataformaMicroservices: Utilizando o Twitter como Plataforma
Microservices: Utilizando o Twitter como Plataforma
 
Integrações de APIs do Google no iOS (DevFest NE e SP)
Integrações de APIs do Google no iOS (DevFest NE e SP)Integrações de APIs do Google no iOS (DevFest NE e SP)
Integrações de APIs do Google no iOS (DevFest NE e SP)
 
MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Intere...
MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Intere...MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Intere...
MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Intere...
 
Dissertação de Mestrado - Planejamento para Serviços Web Semânticos
Dissertação de Mestrado - Planejamento para Serviços Web SemânticosDissertação de Mestrado - Planejamento para Serviços Web Semânticos
Dissertação de Mestrado - Planejamento para Serviços Web Semânticos
 
Planejamento para Serviços Web Semânticos
Planejamento para Serviços Web SemânticosPlanejamento para Serviços Web Semânticos
Planejamento para Serviços Web Semânticos
 

Swift, a nova linguagem de programação da Apple (CocoaHeads Sao Paulo)

  • 1. Swift A nova linguagem de programação da Apple Juliana Chahoud
  • 3. Apple anuncia nova linguagem de programação! +- 20 dias de experiência com Swift
  • 4. Características Swift • Moderna, Rápida e Segura • iOS 7 e 8 • OS X 10.9 e 10.10
  • 5. Xcode 6 - Beta2
  • 6. Projeto ObjC x Swift • Swift não possui arquivos header (.h) • main.m não é mais necessário X
  • 7. Não é necessário criar um projeto para “experimentar” o Swift Playground REPL (Read-Eval-Print-Loop)
  • 9. Como praticar de fato • Criar um cenário comum de um app simples, interagindo com Cocoa e Objective-C: • Utilizar alguma API - NSURLConnection • TableView e célula customizada • Integração com Cocoapods e Obj-C • Aproveitando a onda do momento: App Copa do Mundo
  • 10. Estudo de caso: App Copa do Mundo
  • 12. Demo: app Copa do Mundo https://github.com/jchahoud/WorldCup-Swift.git
  • 13. AppDelegate /* In Obj-C: #import <UIKit/UIKit.h> */ import UIKit /* "Replace" the main file and UIApplicationMain instance creation In Obj-C (in main.m): UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); */ @UIApplicationMain /* In Obj-C: @interface AppDelegate : UIResponder <UIApplicationDelegate> */ class AppDelegate: UIResponder, UIApplicationDelegate { /* In Obj-C: @property (strong, nonatomic) UIWindow *window; */ var window: UIWindow? /* In Obj-C - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { */ func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool { return true }
  • 16. Classe Match: Swift x Obj-C import Foundation /* In Obj-C: @interface Match : NSObject */ class Match { /* In Obj-C: @property (nonatomic,strong) NSString* c_AwayLogoImage; */ var c_AwayLogoImage:String? var c_AwayTeam_en:String? var c_HomeLogoImage:String? var c_HomeTeam_en:String? var c_Stadium:String? var n_AwayGoals:Int? var n_HomeGoals:Int? /* In Obj-C: -(id) initWithDictionary:(NSDictionary*)dict { self = [super init]; if (self){ _c_AwayLogoImage = dict[@"c_AwayLogoImage"]; //.... } return self; } */ init(dict: NSDictionary!) { c_AwayLogoImage = dict["c_AwayLogoImage"] as? String c_AwayTeam_en = dict["c_AwayTeam_en"] as? String c_HomeLogoImage = dict["c_HomeLogoImage"] as? String c_HomeTeam_en = dict["c_HomeTeam_en"] as? String c_Stadium = dict["c_Stadium"] as? String n_AwayGoals = dict["n_AwayGoals"] as? Int n_HomeGoals = dict["n_HomeGoals"] as? Int } }
  • 17. Subclasse de UITableViewCell import UIKit class MatchCell: UITableViewCell { @IBOutlet var homeTeam: UILabel @IBOutlet var homeGoals: UILabel @IBOutlet var homeLogoImage: UIImageView @IBOutlet var awayTeam: UILabel @IBOutlet var awayGoals: UILabel @IBOutlet var awayLogoImage: UIImageView @IBOutlet var stadiums: UILabel func configCell (match: Match)->Void { //load teams names and stadium homeTeam.text = match.c_HomeTeam_en awayTeam.text = match.c_AwayTeam_en stadiums.text = match.c_Stadium //load team goals unwrapping the optionals if let goals = match.n_HomeGoals { homeGoals.text = "(goals)" } if let goals = match.n_AwayGoals { awayGoals.text = "(goals)" } //lazy images loading with SDWebImage homeLogoImage.setImageWithURL(NSURL(string:match.c_HomeLogoImage)) awayLogoImage.setImageWithURL(NSURL(string:match.c_AwayLogoImage)) } }
  • 18. API: informações de jogos let apiFifaUrl = NSURL (string: "http://live.mobileapp.fifa.com/api/wc/matches") var request:NSURLRequest = NSURLRequest (URL: apiFifaUrl) NSURLConnection.sendAsynchronousRequest (request, queue: NSOperationQueue.mainQueue(), completionHandler:{ (response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in }) /* ... */
  • 20. Visualização 3D das camadas UI
  • 21. Mais características do Swift • deinit: chamado antes do objeto ser “deallocated” • Gerenciamento de memória: Strong, Weak, e Unowned • Propriedades: • Podem ter getters e setters • pode-se usar willSet e didSet
  • 22. Mais características do Swift • Funções: • podem ser aninhadas • podem receber número variável de parâmetros (numbers: Int...) • podem receber / retornar outras funções • enum e struct podem ter funções • extension (category) adiciona funcionalidade a um tipo existente • Generics: • func swapTwoValues<T>(inout a: T, inout b: T)
  • 23. Mais Informações Documentação The Swift Programming Language Using Swift with Cocoa and Objective-C https://developer.apple.com/swift/ Vídeos WWDC 2014 https://developer.apple.com/videos/wwdc/2014/ Sample Code https://developer.apple.com/library/prerelease/ios/navigation/