SlideShare uma empresa Scribd logo
1 de 31
Baixar para ler offline
IOS 8 COM SWIFT 
Novidades e a Nova Linguagem da Apple
VARIÁVEIS 
• Podem ter o tipo inferido pelo compilador 
• Declaradas com a expressão var 
var 
oi: 
String 
= 
"Oi 
Mundo" 
var 
oi 
= 
"Oi 
Mundo" 
• Constantes declaradas com a expressão let 
let 
msg: 
String 
= 
"Oi 
Mundo" 
let 
texto 
= 
"Oi 
Mundo"
STRINGS 
• Concatenadas com o sinal + 
let 
titulo 
= 
“Palestra 
de 
Swift" 
let 
opiniao 
= 
"Maravilhosa!" 
let 
descricao 
= 
titulo 
+ 
" 
-­‐ 
" 
+ 
opiniao 
• Podem ser interpoladas com variáveis 
let 
dataPublicacao 
= 
"29 
de 
Novembro 
de 
2014” 
let 
artigoBlog 
= 
"Artigo 
publicado 
em: 
(dataPublicacao)"
ENUMERAÇÕES 
enum 
Valor: 
Int 
{ 
case 
As 
= 
1 
case 
Dois, 
Tres, 
Quatro, 
Cinco, 
Seis, 
Setes, 
Oito, 
Nove, 
Dez 
case 
Valete, 
Rainha, 
Rei 
func 
descricao() 
-­‐> 
String 
{ 
switch 
self 
{ 
case 
.As: 
return 
"as" 
case 
.Valete: 
return 
"valete" 
case 
.Rainha: 
return 
"rainha" 
case 
.King: 
return 
"rei" 
default: 
return 
String(self.rawValue) 
} 
} 
} 
! 
let 
as 
= 
Valor.As 
let 
valorAs 
= 
as.rawValue
ENUMERAÇÕES 
enum 
Naipe 
{ 
case 
Espadas, 
Copas, 
Diamonds, 
Paus 
func 
descricao() 
-­‐> 
String 
{ 
switch 
self 
{ 
case 
.Espadas: 
return 
"espadas" 
case 
.Copas: 
return 
"copas" 
case 
.Ouro: 
return 
"ouro" 
case 
.Paus: 
return 
"paus" 
} 
} 
} 
! 
let 
copas 
= 
Naipe.Copas 
let 
copasDescricao 
= 
copas.descricao()
ESTRUTURAS 
struct 
Carta 
{ 
var 
valor: 
Valor 
var 
naipe: 
Naipe 
func 
descricao() 
-­‐> 
String 
{ 
return 
"(valor.descricao()) 
de 
(naipe.descricao())" 
} 
} 
! 
let 
tresDeEspadas 
= 
Carta(valor: 
.Tres, 
naipe: 
.Espadas) 
let 
descricaoTresDeEspadas 
= 
tresDeEspadas.descricao()
OUTROS TIPOS DE DADOS 
• Inteiro 
• Int 
• Ponto flutuante 
• Double : 64 bits 
• Float : 32 bits 
• Booleano 
• Bool
COLEÇÕES – ARRAY 
• Declaração 
var 
nomesCartas: 
String[] 
= 
["Valete", 
"Rainha", 
"Rei"] 
var 
nomesCartas 
= 
["Valete", 
"Rainha", 
"Rei"] 
• Adicionar item 
nomesCartas 
+= 
"Ás" 
nomesCartas 
+= 
["2", 
"3", 
"4", 
"5", 
"6", 
"7", 
"8", 
"9", 
"10"] 
• Remover item 
ss 
• Substituir item 
tarefas[0] 
= 
"Revistar 
o 
Artigo 
do 
Blog" 
tarefas[2..<5] 
= 
["Pegar 
Roupas","Pegar 
Comida", 
"Fazer 
Jantar"]
COLEÇÕES – DICTIONARY 
• Declaração 
var 
cartas 
= 
["Valete" 
: 
11, 
"Rainha" 
: 
12, 
"Rei" 
: 
13] 
• Adicionar item 
cartas["Valete"] 
= 
11 
• Remover item 
ss 
• Substituir item 
cartas["Valete"] 
= 
11 
cartas["Rainha"] 
= 
12 
cartas["Rei"] 
= 
13
CONTROLE DE FLUXO 
while 
condicao 
{ 
println("repetição") 
} 
! 
! 
var 
mensagem 
= 
"Começando 
o 
download" 
do 
{ 
println(mensagem) 
mensagem 
= 
"Fazendo 
dowload.." 
} 
while 
!completo
CONTROLE DE FLUXO 
var 
nomesCartas 
= 
["Valete", 
"Rainha", 
"Rei"] 
! 
for 
var 
i 
= 
1; 
i 
< 
nomesCartas.count; 
++i 
{ 
println(nomesCartas[i]) 
} 
! 
for 
cardName 
in 
cardNames 
{ 
println(cardName) 
}
CONTROLE DE FLUXO 
for 
numero 
in 
1...10 
{ 
println("(numero) 
vezes 
2 
é 
(numero*2)") 
} 
! 
var 
cartas 
= 
["Valete" 
: 
11, 
"Rainha" 
: 
12, 
"Rei" 
: 
13] 
! 
for 
(nome, 
valor) 
in 
cartas 
{ 
println("(nome) 
= 
(valor)") 
}
CONDICIONAIS 
if 
valorCarta 
== 
11 
{ 
println("Valete") 
} 
else 
if 
valorCarta 
== 
12 
{ 
println("Rainha") 
} 
else 
{ 
println("Desconhecido") 
} 
! 
switch 
valorCarta 
{ 
case 
11: 
println("Valete") 
case 
12: 
println("Rainha") 
default: 
println("Desconhecido") 
}
CONDICIONAIS 
var 
usuarios: 
User[] 
= 
[ 
... 
] 
var 
host 
= 
/* 
algum 
usuário 
*/ 
! 
for 
usuario 
in 
usuarios 
{ 
if 
usuario 
=== 
host 
{ 
! 
println("este 
é 
o 
host") 
} 
else 
{ 
! 
println("este 
é 
um 
convidado") 
} 
}
CONDICIONAIS 
switch 
distancia 
{ 
case 
0: 
println("inválida") 
case 
1,2,3,4,5: 
println("perto") 
case 
6,7,8,9,10: 
println("longe") 
default: 
println("muito 
longe") 
} 
switch 
distancia 
{ 
case 
0: 
println("inválida") 
case 
1..5: 
println("perto") 
case 
6..10 
: 
println("longe") 
default: 
println("muito 
longe") 
}
FUNÇÕES 
func 
imprimeCarta(nomeCarta: 
String, 
valorCarta: 
Int) 
{ 
println("(nomeCarta) 
= 
(valorCarta)") 
} 
! 
func 
imprimeCarta(nomeCarta: 
String, 
valorCarta: 
Int) 
-­‐> 
String 
{ 
return 
"(nomeCarta) 
= 
(valorCarta)" 
}
OPCIONAIS 
• Permitem ter variáveis sem valor (nil) 
• Podem estar em parâmetros de funções, em seu retorno ou declarações de 
variáveis 
var 
x: 
Float? 
var 
y: 
Float? 
! 
x 
= 
1.2 
y 
= 
nil 
! 
func 
adiciona(x:Float?, 
y:Float?) 
-­‐> 
Float 
{ 
if 
x 
&& 
y 
{ 
return 
x 
+ 
y 
} 
else 
{ 
return 
nil 
} 
}
OPCIONAIS 
func 
encontraAcao(empresa: 
String) 
-­‐> 
String? 
{ 
if 
(empresa 
== 
"Apple") 
{ 
return 
"AAPL" 
} 
else 
if 
(empresa 
== 
"Google") 
{ 
return 
"GOOG" 
} 
! 
return 
nil 
} 
! 
var 
acao:String? 
= 
encontraAcao("Facebook") 
let 
texto 
= 
"Código 
da 
Ação 
-­‐ 
" 
let 
menssagem 
= 
texto 
+ 
acao 
// 
Erro 
de 
compilação 
aqui 
println(menssagem)
OPCIONAIS E UNWRAPPING 
func 
encontraAcao(empresa: 
String) 
-­‐> 
String? 
{ 
if 
(empresa 
== 
"Apple") 
{ 
return 
"AAPL" 
} 
else 
if 
(empresa 
== 
"Google") 
{ 
return 
"GOOG" 
} 
! 
return 
nil 
} 
! 
var 
acao:String? 
= 
encontraAcao("Facebook") 
let 
texto 
= 
"Código 
da 
Ação 
-­‐ 
" 
if 
acao 
{ 
let 
menssagem 
= 
texto 
+ 
acao! 
println(menssagem) 
}
OPCIONAIS E UNWRAPPING 
func 
encontraAcao(empresa: 
String) 
-­‐> 
String? 
{ 
if 
(empresa 
== 
"Apple") 
{ 
return 
"AAPL" 
} 
else 
if 
(empresa 
== 
"Google") 
{ 
return 
"GOOG" 
} 
! 
return 
nil 
} 
! 
var 
acao:String? 
= 
encontraAcao("Facebook") 
let 
texto 
= 
"Código 
da 
Ação 
-­‐ 
" 
if 
let 
acaoTemp 
= 
acao 
{ 
let 
mensagem 
= 
texto 
+ 
acaoTemp 
println(mensagem) 
}
OPCIONAIS E UNWRAPPING 
func 
encontraAcao(empresa: 
String) 
-­‐> 
String? 
{ 
if 
(empresa 
== 
"Apple") 
{ 
return 
"AAPL" 
} 
else 
if 
(empresa 
== 
"Google") 
{ 
return 
"GOOG" 
} 
! 
return 
nil 
} 
! 
let 
texto 
= 
"Código 
da 
Ação 
-­‐ 
" 
if 
var 
acao 
= 
encontraAcao("Facebook") 
{ 
let 
mensagem 
= 
texto 
+ 
acaoTemp 
println(mensagem) 
}
OPCIONAIS E UNWRAPPING 
class 
Acao 
{ 
var 
codigo: 
String? 
var 
preco: 
Double? 
} 
! 
func 
encontraAcao(empresa: 
String) 
-­‐> 
Acao? 
{ 
if 
(empresa 
== 
"Apple") 
{ 
let 
aapl: 
Acao 
= 
Acao() 
aapl.codigo 
= 
"AAPL" 
aapl.preco 
= 
90.32 
return 
aapl 
} 
else 
if 
(empresa 
== 
"Google") 
{ 
let 
goog: 
Acao 
= 
Acao() 
goog.codigo 
= 
"GOOG" 
goog.preco 
= 
556.36 
return 
goog 
} 
return 
nil 
}
OPCIONAIS E 
ENCADEAMENTO 
if 
let 
acao 
= 
encontraAcao("Apple") 
{ 
if 
let 
precoAcao 
= 
acao.preco 
{ 
let 
custoTotal 
= 
precoAcao 
* 
100 
println(custoTotal) 
} 
} 
! 
if 
let 
precoAcao 
= 
encontraAcao("Apple")?.preco 
{ 
let 
custoTotal 
= 
precoAcao 
* 
100 
println(custoTotal) 
}
VALORES PADRÃO (DEFAULT) 
• Podem ser usados em parâmetros para torná-los 
opcionais 
func 
adiciona(x:Float?, 
y:Float?, 
z:Float 
= 
0.0) 
-­‐> 
Float 
{ 
return 
x 
+ 
y 
+ 
z 
}
CLASSES 
class 
Ponto 
{ 
var 
x 
= 
0.0 
var 
y 
= 
0.0 
} 
! 
var 
ponto 
= 
Ponto() 
! 
ponto.x 
= 
100 
ponto.y 
= 
200 
class 
Ponto 
{ 
var 
x: 
Float 
var 
y: 
Float 
! 
init(x: 
Float, 
y: 
Float) 
{ 
self.x 
= 
x 
self.y 
= 
y 
} 
} 
! 
var 
ponto 
= 
Ponto(x: 
100, 
y: 
200)
HERANÇA 
class 
ClasseMae 
{ 
func 
fazAlgo() 
{ 
println("Olá 
da 
Classe 
Mãe") 
} 
} 
! 
class 
Subclasse: 
ClasseMae 
{ 
override 
func 
fazAlgo() 
{ 
super.fazAlgo() 
println("Olá 
da 
Subclasse") 
} 
}
PROTOCOLOS 
• Funcionam como interfaces em outras linguagens 
• Mas podem ter a implementação opcional 
protocol 
Miravel 
{ 
var 
vida: 
Int 
{ 
get 
set 
} 
func 
tomarDano(dano: 
Int) 
} 
! 
protocol 
Atiravel 
{ 
func 
atirar(alvo: 
Miravel) 
}
PROTOCOLOS 
class 
Pistola: 
Atiravel 
{ 
func 
atirar(target: 
Miravel) 
{ 
alvo.tomarDano(1) 
} 
} 
! 
class 
Rifle: 
Atiravel 
{ 
func 
atirar(alvo: 
Miravel) 
{ 
alvo.tomarDano(5) 
} 
}
PROTOCOLOS 
class 
Inimigo: 
Miravel 
{ 
var 
vida: 
Int 
= 
10 
! 
func 
tomarDano(dano: 
Int) 
{ 
vida 
-­‐= 
dano 
println("inimigo 
perdeu 
(dano) 
pontos 
de 
vida") 
! 
if 
vida 
<= 
0 
{ 
println("o 
inimigo 
está 
morto 
agora") 
} 
} 
}
PROTOCOLOS 
class 
Jogador 
{ 
var 
arma: 
Atiravel! 
! 
init(arma: 
Atiravel) 
{ 
self.arma 
= 
arma 
} 
! 
func 
atirar(alvo: 
Miravel) 
{ 
arma.atirar(alvo) 
} 
}
EXTENÇÕES 
protocol 
protocoloExemplo 
{ 
var 
descricao: 
String 
{ 
get 
} 
mutating 
func 
ajuste() 
} 
! 
extension 
Int: 
protocoloExemplo 
{ 
var 
descricao: 
String 
{ 
return 
"O 
número 
é 
(self)" 
} 
mutating 
func 
ajuste() 
{ 
self 
+= 
42 
} 
} 
! 
7.descricao

Mais conteúdo relacionado

Mais procurados

T12_LM3: Arrays (2013-2014)
T12_LM3: Arrays (2013-2014)T12_LM3: Arrays (2013-2014)
T12_LM3: Arrays (2013-2014)Carlos Santos
 
LabMM3 - Aula teórica 10
LabMM3 - Aula teórica 10LabMM3 - Aula teórica 10
LabMM3 - Aula teórica 10Carlos Santos
 
Programação funcional em JavaScript: como e por quê?
Programação funcional em JavaScript: como e por quê?Programação funcional em JavaScript: como e por quê?
Programação funcional em JavaScript: como e por quê?Arthur Xavier
 
Programação funcional tipada: uma introdução
Programação funcional tipada: uma introduçãoProgramação funcional tipada: uma introdução
Programação funcional tipada: uma introduçãoArthur Xavier
 
LabMM4 (T14 - 12/13) - Arrays
LabMM4 (T14 - 12/13) - ArraysLabMM4 (T14 - 12/13) - Arrays
LabMM4 (T14 - 12/13) - ArraysCarlos Santos
 
Java 8 - Afinal onde usamos no dia a dia? GOJava 15 anos!
Java 8 - Afinal onde usamos no dia a dia? GOJava 15 anos!Java 8 - Afinal onde usamos no dia a dia? GOJava 15 anos!
Java 8 - Afinal onde usamos no dia a dia? GOJava 15 anos!Frederico Maia Arantes
 
(A12) LabMM3 - JavaScript - Arrays
(A12) LabMM3 - JavaScript - Arrays(A12) LabMM3 - JavaScript - Arrays
(A12) LabMM3 - JavaScript - ArraysCarlos Santos
 
Bogosort e Técnicas Realmente Avançadas de Programação
Bogosort e Técnicas Realmente Avançadas de ProgramaçãoBogosort e Técnicas Realmente Avançadas de Programação
Bogosort e Técnicas Realmente Avançadas de ProgramaçãoRodolpho Eckhardt
 
Kotlin: conhecendo features de uma linguagem moderna
Kotlin: conhecendo features de uma linguagem modernaKotlin: conhecendo features de uma linguagem moderna
Kotlin: conhecendo features de uma linguagem modernaFabrício Rissetto
 
Proxy, Man-In-The-Middle e testes
Proxy, Man-In-The-Middle e testesProxy, Man-In-The-Middle e testes
Proxy, Man-In-The-Middle e testesStanislaw Pusep
 
Ruby on rails gds 2011
Ruby on rails   gds 2011Ruby on rails   gds 2011
Ruby on rails gds 2011JogosUnisinos
 
Lazy Evaluation em Scala
Lazy Evaluation em ScalaLazy Evaluation em Scala
Lazy Evaluation em Scalapmatiello
 
Object Calisthenics: relaxe e escreva códigos simples
Object Calisthenics: relaxe e escreva códigos simplesObject Calisthenics: relaxe e escreva códigos simples
Object Calisthenics: relaxe e escreva códigos simplesOtávio Calaça Xavier
 

Mais procurados (19)

T12_LM3: Arrays (2013-2014)
T12_LM3: Arrays (2013-2014)T12_LM3: Arrays (2013-2014)
T12_LM3: Arrays (2013-2014)
 
Psi m14
Psi m14Psi m14
Psi m14
 
LabMM3 - Aula teórica 10
LabMM3 - Aula teórica 10LabMM3 - Aula teórica 10
LabMM3 - Aula teórica 10
 
Programação funcional em JavaScript: como e por quê?
Programação funcional em JavaScript: como e por quê?Programação funcional em JavaScript: como e por quê?
Programação funcional em JavaScript: como e por quê?
 
Programação funcional tipada: uma introdução
Programação funcional tipada: uma introduçãoProgramação funcional tipada: uma introdução
Programação funcional tipada: uma introdução
 
LabMM4 (T14 - 12/13) - Arrays
LabMM4 (T14 - 12/13) - ArraysLabMM4 (T14 - 12/13) - Arrays
LabMM4 (T14 - 12/13) - Arrays
 
Python 05
Python 05Python 05
Python 05
 
Java 8 - Afinal onde usamos no dia a dia? GOJava 15 anos!
Java 8 - Afinal onde usamos no dia a dia? GOJava 15 anos!Java 8 - Afinal onde usamos no dia a dia? GOJava 15 anos!
Java 8 - Afinal onde usamos no dia a dia? GOJava 15 anos!
 
Php
PhpPhp
Php
 
(A12) LabMM3 - JavaScript - Arrays
(A12) LabMM3 - JavaScript - Arrays(A12) LabMM3 - JavaScript - Arrays
(A12) LabMM3 - JavaScript - Arrays
 
Bogosort e Técnicas Realmente Avançadas de Programação
Bogosort e Técnicas Realmente Avançadas de ProgramaçãoBogosort e Técnicas Realmente Avançadas de Programação
Bogosort e Técnicas Realmente Avançadas de Programação
 
SPL Datastructures
SPL DatastructuresSPL Datastructures
SPL Datastructures
 
Minicurso de jQuery
Minicurso de jQueryMinicurso de jQuery
Minicurso de jQuery
 
Kotlin: conhecendo features de uma linguagem moderna
Kotlin: conhecendo features de uma linguagem modernaKotlin: conhecendo features de uma linguagem moderna
Kotlin: conhecendo features de uma linguagem moderna
 
Proxy, Man-In-The-Middle e testes
Proxy, Man-In-The-Middle e testesProxy, Man-In-The-Middle e testes
Proxy, Man-In-The-Middle e testes
 
Ruby on rails gds 2011
Ruby on rails   gds 2011Ruby on rails   gds 2011
Ruby on rails gds 2011
 
Lazy Evaluation em Scala
Lazy Evaluation em ScalaLazy Evaluation em Scala
Lazy Evaluation em Scala
 
Object Calisthenics: relaxe e escreva códigos simples
Object Calisthenics: relaxe e escreva códigos simplesObject Calisthenics: relaxe e escreva códigos simples
Object Calisthenics: relaxe e escreva códigos simples
 
Agbd aula4 sql_ddl
Agbd aula4 sql_ddlAgbd aula4 sql_ddl
Agbd aula4 sql_ddl
 

Destaque

Análise das metodologias para definição de escopo em Lean Startups
Análise das metodologias para definição de escopo em Lean StartupsAnálise das metodologias para definição de escopo em Lean Startups
Análise das metodologias para definição de escopo em Lean StartupsAlexandre Rocha Lima e Marcondes
 
Estudos de caso de projetos de empreendedorismo e sugestões de ações futuras ...
Estudos de caso de projetos de empreendedorismo e sugestões de ações futuras ...Estudos de caso de projetos de empreendedorismo e sugestões de ações futuras ...
Estudos de caso de projetos de empreendedorismo e sugestões de ações futuras ...Alexandre Rocha Lima e Marcondes
 
Uma correlação entre Lean Startups e Gerenciamento de Projetos
Uma correlação entre Lean Startups e Gerenciamento de ProjetosUma correlação entre Lean Startups e Gerenciamento de Projetos
Uma correlação entre Lean Startups e Gerenciamento de ProjetosAlexandre Rocha Lima e Marcondes
 
Análise das metodologias para definição de escopo em Lean Startups
Análise das metodologias para definição de escopo em Lean StartupsAnálise das metodologias para definição de escopo em Lean Startups
Análise das metodologias para definição de escopo em Lean StartupsAlexandre Rocha Lima e Marcondes
 
Uma proposta de gerenciamento de riscos para o empreendedorismo
Uma proposta de gerenciamento de riscos para o empreendedorismoUma proposta de gerenciamento de riscos para o empreendedorismo
Uma proposta de gerenciamento de riscos para o empreendedorismoAlexandre Rocha Lima e Marcondes
 
Uma correlação entre Lean Startups e Gerenciamento de Projetos
Uma correlação entre Lean Startups e Gerenciamento de ProjetosUma correlação entre Lean Startups e Gerenciamento de Projetos
Uma correlação entre Lean Startups e Gerenciamento de ProjetosAlexandre Rocha Lima e Marcondes
 
Outmovel - Ganhe dinheiro com seu carro e por convidar amigos
Outmovel - Ganhe dinheiro com seu carro e por convidar amigosOutmovel - Ganhe dinheiro com seu carro e por convidar amigos
Outmovel - Ganhe dinheiro com seu carro e por convidar amigosBill Tavares
 

Destaque (12)

Palestra Xamarin.Android - GUX
Palestra Xamarin.Android - GUXPalestra Xamarin.Android - GUX
Palestra Xamarin.Android - GUX
 
Compilando o Android 5 para o Nexus 5
Compilando o Android 5 para o Nexus 5Compilando o Android 5 para o Nexus 5
Compilando o Android 5 para o Nexus 5
 
Android Open Source Project - AOSP
Android Open Source Project  - AOSPAndroid Open Source Project  - AOSP
Android Open Source Project - AOSP
 
Análise das metodologias para definição de escopo em Lean Startups
Análise das metodologias para definição de escopo em Lean StartupsAnálise das metodologias para definição de escopo em Lean Startups
Análise das metodologias para definição de escopo em Lean Startups
 
Estudos de caso de projetos de empreendedorismo e sugestões de ações futuras ...
Estudos de caso de projetos de empreendedorismo e sugestões de ações futuras ...Estudos de caso de projetos de empreendedorismo e sugestões de ações futuras ...
Estudos de caso de projetos de empreendedorismo e sugestões de ações futuras ...
 
Uma correlação entre Lean Startups e Gerenciamento de Projetos
Uma correlação entre Lean Startups e Gerenciamento de ProjetosUma correlação entre Lean Startups e Gerenciamento de Projetos
Uma correlação entre Lean Startups e Gerenciamento de Projetos
 
Análise das metodologias para definição de escopo em Lean Startups
Análise das metodologias para definição de escopo em Lean StartupsAnálise das metodologias para definição de escopo em Lean Startups
Análise das metodologias para definição de escopo em Lean Startups
 
Uma proposta de gerenciamento de riscos para o empreendedorismo
Uma proposta de gerenciamento de riscos para o empreendedorismoUma proposta de gerenciamento de riscos para o empreendedorismo
Uma proposta de gerenciamento de riscos para o empreendedorismo
 
Neggocio.com.br - Apresentação cliente
Neggocio.com.br - Apresentação clienteNeggocio.com.br - Apresentação cliente
Neggocio.com.br - Apresentação cliente
 
Uma correlação entre Lean Startups e Gerenciamento de Projetos
Uma correlação entre Lean Startups e Gerenciamento de ProjetosUma correlação entre Lean Startups e Gerenciamento de Projetos
Uma correlação entre Lean Startups e Gerenciamento de Projetos
 
Outmovel - Ganhe dinheiro com seu carro e por convidar amigos
Outmovel - Ganhe dinheiro com seu carro e por convidar amigosOutmovel - Ganhe dinheiro com seu carro e por convidar amigos
Outmovel - Ganhe dinheiro com seu carro e por convidar amigos
 
Neggocio.com.br - Apresentação consultor
Neggocio.com.br - Apresentação consultorNeggocio.com.br - Apresentação consultor
Neggocio.com.br - Apresentação consultor
 

Semelhante a iOS 8 com Swift - Novidades e a nova linguagem da Apple

Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScriptBruno Catão
 
Introdução à MEAN Stack
Introdução à MEAN StackIntrodução à MEAN Stack
Introdução à MEAN StackBruno Catão
 
Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Curso Desenvolvimento WEB com PHP - PHP (parte 1)Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Curso Desenvolvimento WEB com PHP - PHP (parte 1)Willian Magalhães
 
Aprendendo Kotlin na Prática
Aprendendo Kotlin na PráticaAprendendo Kotlin na Prática
Aprendendo Kotlin na PráticaFelipe Pedroso
 
Turbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com KotlinTurbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com KotlinNelson Glauber Leal
 
Swift!.opcionais.oh!.my()?!?
Swift!.opcionais.oh!.my()?!?Swift!.opcionais.oh!.my()?!?
Swift!.opcionais.oh!.my()?!?Tales Andrade
 
Fugindo para as colinas com Python - Julio Biason - Tchelinux Bento Gonçalves...
Fugindo para as colinas com Python - Julio Biason - Tchelinux Bento Gonçalves...Fugindo para as colinas com Python - Julio Biason - Tchelinux Bento Gonçalves...
Fugindo para as colinas com Python - Julio Biason - Tchelinux Bento Gonçalves...Tchelinux
 
PHP para Adultos: Clean Code e Object Calisthenics
PHP para Adultos: Clean Code e Object CalisthenicsPHP para Adultos: Clean Code e Object Calisthenics
PHP para Adultos: Clean Code e Object CalisthenicsGuilherme Blanco
 
Introdução a linguagem Swift
Introdução a linguagem SwiftIntrodução a linguagem Swift
Introdução a linguagem SwiftGabriel Rodrigues
 
Palestra python
Palestra pythonPalestra python
Palestra pythonRony Cruch
 
Por que dizemos que Scala é uma linguagem funcional?
Por que dizemos que Scala é uma linguagem funcional?Por que dizemos que Scala é uma linguagem funcional?
Por que dizemos que Scala é uma linguagem funcional?pmatiello
 
Javascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOJavascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOWesley Lemos
 
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUACândido Sales Gomes
 

Semelhante a iOS 8 com Swift - Novidades e a nova linguagem da Apple (20)

Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScript
 
Introdução à MEAN Stack
Introdução à MEAN StackIntrodução à MEAN Stack
Introdução à MEAN Stack
 
Java script aula 02 - operadores
Java script   aula 02 - operadoresJava script   aula 02 - operadores
Java script aula 02 - operadores
 
Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Curso Desenvolvimento WEB com PHP - PHP (parte 1)Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Curso Desenvolvimento WEB com PHP - PHP (parte 1)
 
Aprendendo Kotlin na Prática
Aprendendo Kotlin na PráticaAprendendo Kotlin na Prática
Aprendendo Kotlin na Prática
 
Turbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com KotlinTurbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com Kotlin
 
Swift!.opcionais.oh!.my()?!?
Swift!.opcionais.oh!.my()?!?Swift!.opcionais.oh!.my()?!?
Swift!.opcionais.oh!.my()?!?
 
JavaScript - A Linguagem
JavaScript - A LinguagemJavaScript - A Linguagem
JavaScript - A Linguagem
 
Fugindo para as colinas com Python - Julio Biason - Tchelinux Bento Gonçalves...
Fugindo para as colinas com Python - Julio Biason - Tchelinux Bento Gonçalves...Fugindo para as colinas com Python - Julio Biason - Tchelinux Bento Gonçalves...
Fugindo para as colinas com Python - Julio Biason - Tchelinux Bento Gonçalves...
 
PHP para Adultos: Clean Code e Object Calisthenics
PHP para Adultos: Clean Code e Object CalisthenicsPHP para Adultos: Clean Code e Object Calisthenics
PHP para Adultos: Clean Code e Object Calisthenics
 
Javafx Introdução
Javafx IntroduçãoJavafx Introdução
Javafx Introdução
 
Introdução a linguagem Swift
Introdução a linguagem SwiftIntrodução a linguagem Swift
Introdução a linguagem Swift
 
Palestra python
Palestra pythonPalestra python
Palestra python
 
Ruby On Rails
Ruby On RailsRuby On Rails
Ruby On Rails
 
Tdc2010 web
Tdc2010 webTdc2010 web
Tdc2010 web
 
Por que dizemos que Scala é uma linguagem funcional?
Por que dizemos que Scala é uma linguagem funcional?Por que dizemos que Scala é uma linguagem funcional?
Por que dizemos que Scala é uma linguagem funcional?
 
Javascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOJavascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POO
 
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA
 
Php
PhpPhp
Php
 
Javascript
JavascriptJavascript
Javascript
 

iOS 8 com Swift - Novidades e a nova linguagem da Apple

  • 1. IOS 8 COM SWIFT Novidades e a Nova Linguagem da Apple
  • 2. VARIÁVEIS • Podem ter o tipo inferido pelo compilador • Declaradas com a expressão var var oi: String = "Oi Mundo" var oi = "Oi Mundo" • Constantes declaradas com a expressão let let msg: String = "Oi Mundo" let texto = "Oi Mundo"
  • 3. STRINGS • Concatenadas com o sinal + let titulo = “Palestra de Swift" let opiniao = "Maravilhosa!" let descricao = titulo + " -­‐ " + opiniao • Podem ser interpoladas com variáveis let dataPublicacao = "29 de Novembro de 2014” let artigoBlog = "Artigo publicado em: (dataPublicacao)"
  • 4. ENUMERAÇÕES enum Valor: Int { case As = 1 case Dois, Tres, Quatro, Cinco, Seis, Setes, Oito, Nove, Dez case Valete, Rainha, Rei func descricao() -­‐> String { switch self { case .As: return "as" case .Valete: return "valete" case .Rainha: return "rainha" case .King: return "rei" default: return String(self.rawValue) } } } ! let as = Valor.As let valorAs = as.rawValue
  • 5. ENUMERAÇÕES enum Naipe { case Espadas, Copas, Diamonds, Paus func descricao() -­‐> String { switch self { case .Espadas: return "espadas" case .Copas: return "copas" case .Ouro: return "ouro" case .Paus: return "paus" } } } ! let copas = Naipe.Copas let copasDescricao = copas.descricao()
  • 6. ESTRUTURAS struct Carta { var valor: Valor var naipe: Naipe func descricao() -­‐> String { return "(valor.descricao()) de (naipe.descricao())" } } ! let tresDeEspadas = Carta(valor: .Tres, naipe: .Espadas) let descricaoTresDeEspadas = tresDeEspadas.descricao()
  • 7. OUTROS TIPOS DE DADOS • Inteiro • Int • Ponto flutuante • Double : 64 bits • Float : 32 bits • Booleano • Bool
  • 8. COLEÇÕES – ARRAY • Declaração var nomesCartas: String[] = ["Valete", "Rainha", "Rei"] var nomesCartas = ["Valete", "Rainha", "Rei"] • Adicionar item nomesCartas += "Ás" nomesCartas += ["2", "3", "4", "5", "6", "7", "8", "9", "10"] • Remover item ss • Substituir item tarefas[0] = "Revistar o Artigo do Blog" tarefas[2..<5] = ["Pegar Roupas","Pegar Comida", "Fazer Jantar"]
  • 9. COLEÇÕES – DICTIONARY • Declaração var cartas = ["Valete" : 11, "Rainha" : 12, "Rei" : 13] • Adicionar item cartas["Valete"] = 11 • Remover item ss • Substituir item cartas["Valete"] = 11 cartas["Rainha"] = 12 cartas["Rei"] = 13
  • 10. CONTROLE DE FLUXO while condicao { println("repetição") } ! ! var mensagem = "Começando o download" do { println(mensagem) mensagem = "Fazendo dowload.." } while !completo
  • 11. CONTROLE DE FLUXO var nomesCartas = ["Valete", "Rainha", "Rei"] ! for var i = 1; i < nomesCartas.count; ++i { println(nomesCartas[i]) } ! for cardName in cardNames { println(cardName) }
  • 12. CONTROLE DE FLUXO for numero in 1...10 { println("(numero) vezes 2 é (numero*2)") } ! var cartas = ["Valete" : 11, "Rainha" : 12, "Rei" : 13] ! for (nome, valor) in cartas { println("(nome) = (valor)") }
  • 13. CONDICIONAIS if valorCarta == 11 { println("Valete") } else if valorCarta == 12 { println("Rainha") } else { println("Desconhecido") } ! switch valorCarta { case 11: println("Valete") case 12: println("Rainha") default: println("Desconhecido") }
  • 14. CONDICIONAIS var usuarios: User[] = [ ... ] var host = /* algum usuário */ ! for usuario in usuarios { if usuario === host { ! println("este é o host") } else { ! println("este é um convidado") } }
  • 15. CONDICIONAIS switch distancia { case 0: println("inválida") case 1,2,3,4,5: println("perto") case 6,7,8,9,10: println("longe") default: println("muito longe") } switch distancia { case 0: println("inválida") case 1..5: println("perto") case 6..10 : println("longe") default: println("muito longe") }
  • 16. FUNÇÕES func imprimeCarta(nomeCarta: String, valorCarta: Int) { println("(nomeCarta) = (valorCarta)") } ! func imprimeCarta(nomeCarta: String, valorCarta: Int) -­‐> String { return "(nomeCarta) = (valorCarta)" }
  • 17. OPCIONAIS • Permitem ter variáveis sem valor (nil) • Podem estar em parâmetros de funções, em seu retorno ou declarações de variáveis var x: Float? var y: Float? ! x = 1.2 y = nil ! func adiciona(x:Float?, y:Float?) -­‐> Float { if x && y { return x + y } else { return nil } }
  • 18. OPCIONAIS func encontraAcao(empresa: String) -­‐> String? { if (empresa == "Apple") { return "AAPL" } else if (empresa == "Google") { return "GOOG" } ! return nil } ! var acao:String? = encontraAcao("Facebook") let texto = "Código da Ação -­‐ " let menssagem = texto + acao // Erro de compilação aqui println(menssagem)
  • 19. OPCIONAIS E UNWRAPPING func encontraAcao(empresa: String) -­‐> String? { if (empresa == "Apple") { return "AAPL" } else if (empresa == "Google") { return "GOOG" } ! return nil } ! var acao:String? = encontraAcao("Facebook") let texto = "Código da Ação -­‐ " if acao { let menssagem = texto + acao! println(menssagem) }
  • 20. OPCIONAIS E UNWRAPPING func encontraAcao(empresa: String) -­‐> String? { if (empresa == "Apple") { return "AAPL" } else if (empresa == "Google") { return "GOOG" } ! return nil } ! var acao:String? = encontraAcao("Facebook") let texto = "Código da Ação -­‐ " if let acaoTemp = acao { let mensagem = texto + acaoTemp println(mensagem) }
  • 21. OPCIONAIS E UNWRAPPING func encontraAcao(empresa: String) -­‐> String? { if (empresa == "Apple") { return "AAPL" } else if (empresa == "Google") { return "GOOG" } ! return nil } ! let texto = "Código da Ação -­‐ " if var acao = encontraAcao("Facebook") { let mensagem = texto + acaoTemp println(mensagem) }
  • 22. OPCIONAIS E UNWRAPPING class Acao { var codigo: String? var preco: Double? } ! func encontraAcao(empresa: String) -­‐> Acao? { if (empresa == "Apple") { let aapl: Acao = Acao() aapl.codigo = "AAPL" aapl.preco = 90.32 return aapl } else if (empresa == "Google") { let goog: Acao = Acao() goog.codigo = "GOOG" goog.preco = 556.36 return goog } return nil }
  • 23. OPCIONAIS E ENCADEAMENTO if let acao = encontraAcao("Apple") { if let precoAcao = acao.preco { let custoTotal = precoAcao * 100 println(custoTotal) } } ! if let precoAcao = encontraAcao("Apple")?.preco { let custoTotal = precoAcao * 100 println(custoTotal) }
  • 24. VALORES PADRÃO (DEFAULT) • Podem ser usados em parâmetros para torná-los opcionais func adiciona(x:Float?, y:Float?, z:Float = 0.0) -­‐> Float { return x + y + z }
  • 25. CLASSES class Ponto { var x = 0.0 var y = 0.0 } ! var ponto = Ponto() ! ponto.x = 100 ponto.y = 200 class Ponto { var x: Float var y: Float ! init(x: Float, y: Float) { self.x = x self.y = y } } ! var ponto = Ponto(x: 100, y: 200)
  • 26. HERANÇA class ClasseMae { func fazAlgo() { println("Olá da Classe Mãe") } } ! class Subclasse: ClasseMae { override func fazAlgo() { super.fazAlgo() println("Olá da Subclasse") } }
  • 27. PROTOCOLOS • Funcionam como interfaces em outras linguagens • Mas podem ter a implementação opcional protocol Miravel { var vida: Int { get set } func tomarDano(dano: Int) } ! protocol Atiravel { func atirar(alvo: Miravel) }
  • 28. PROTOCOLOS class Pistola: Atiravel { func atirar(target: Miravel) { alvo.tomarDano(1) } } ! class Rifle: Atiravel { func atirar(alvo: Miravel) { alvo.tomarDano(5) } }
  • 29. PROTOCOLOS class Inimigo: Miravel { var vida: Int = 10 ! func tomarDano(dano: Int) { vida -­‐= dano println("inimigo perdeu (dano) pontos de vida") ! if vida <= 0 { println("o inimigo está morto agora") } } }
  • 30. PROTOCOLOS class Jogador { var arma: Atiravel! ! init(arma: Atiravel) { self.arma = arma } ! func atirar(alvo: Miravel) { arma.atirar(alvo) } }
  • 31. EXTENÇÕES protocol protocoloExemplo { var descricao: String { get } mutating func ajuste() } ! extension Int: protocoloExemplo { var descricao: String { return "O número é (self)" } mutating func ajuste() { self += 42 } } ! 7.descricao