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

iOS 8 com swift

  • 1.
    IOS 8 COMSWIFT Novidades e a Nova Linguagem da Apple
  • 2.
    VARIÁVEIS • Podemter 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 • Concatenadascom 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 DEDADOS • 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 • Permitemter 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 • Funcionamcomo 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