O documento descreve as principais características da linguagem Swift da Apple para desenvolvimento no iOS, incluindo: 1) variáveis e constantes; 2) tipos de dados como Strings, Inteiros e Ponto Flutuante; 3) Coleções como Arrays e Dictionaries; 4) Estruturas, Classes, Enumerações e Protocolos; 5) Funções e Controle de Fluxo. O foco é apresentar os principais conceitos da linguagem de forma concisa.
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
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")
}
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)
}
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