Sem dúvida alguma a linguagem Swift dá Apple veio para ficar. Este é o meu segundo post da categoria Swift. Estes dias me deparei com um problema simples, mas que rendeu algumas horas de dor de cabeça, como carregar uma imagem externa dentro do meu App?
As diversas soluções de código prontos que encontrei na web envolviam dezenas de linhas para realizar uma tarefa simples que é carregar uma imagem externa, sendo assim resolvi criar meu próprio código, para minha surpresa foi mais simples e resumido do que pensei. O código se resume basicamente a estas 3 linhas:
let myProfilePictureURL = NSURL(string: urlImagem!.text) let imageData = NSData(contentsOfURL: myProfilePictureURL!) self.imagem.image = UIImage(data: imageData!)
Surpreso? Confeso que eu também!
Obviamente que para funcionar você precisa definir os outros elementos mínimos para carregar um App para IOS. Veja o código completo:
// // ViewController.swift // testeimage // // Created by Fábio Jânio on 17/03/15. // Copyright (c) 2015 Fábio Jânio. All rights reserved. // import UIKit class ViewController: UIViewController { @IBOutlet weak var imagem : UIImageView! @IBOutlet weak var urlImagem : UITextField? @IBAction func carregarImagem() { let myProfilePictureURL = NSURL(string: urlImagem!.text) let imageData = NSData(contentsOfURL: myProfilePictureURL!) self.imagem.image = UIImage(data: imageData!) } }
Nas linhas 13 e 14 temos respectivamente as variáveis:
- imagem: Essa variável é do tipo UIImageView e possui um opcional (!) isso informa Xcode para ele não se preocupar com o estado da variável neste momento, ou seja, ignorar o fato dela não ter sido incivilizada. Tome cuidado com isso pois este tipo de operador permite um valor nulo dentro da variável e se você não tratar isso terá um erro em tempo de execução;
- urlImagem: Essa variável é do tipo UITextField e possui um opcional (?), diferente do operador (!) este não permite valor nulo propriamente dito, sempre irá resultar em um tipo de dado opcional.
Este post não tem como focal falar explicitamente da linguagem mas sim apresentar uma solução para o problema discutido no primeiro parágrafo, então se tiver dúvidas quanto a linguagem busque explicações na web ou realize um curso complementar.
Na linha 16 temos uma Action, ou seja, na minha interface gráfica defini um botão e atribui a ele o evento Touch up inside, resumindo, quando o usuário clicar no botão ele ira disparar o evento em questão e chamar a função daquele Action, que neste caso seria, carregarImagem().
Na linha 18 criamos uma constante chamada myProfilePictureURL e a ela atribuímos o retorno do objeto NSURL(string: urlImagem!.text). Ressaltando que urlImagem!.text é uma forma de acessar os atributos da outlet urlImagem, ou seja, estamos acessando sua propriedade text e extraindo o valor que existe lá, um valor que em nosso caso foi informado em um campo de texto na interface gráfica do nosso App.
Obs: Um objecto NSURL representa um URL que pode potencialmente conter a localização de um recurso em um servidor remoto, o caminho de um ficheiro local no disco, ou mesmo um pedaço arbitrário de dados codificados. Você pode usar objetos de URL para construir URLs e acessar suas peças.
Na linha 19 temos o objeto NSData, este basicamente recebe os dados retornado anteriormente pela NSURL os interpreta com base em atributos retornado no nível anterior e remonta o pacote.
Em nossa ultima linha (20) utilizamos a UIImage para pegar o objeto retornado pela NSData e jogar para a interface gráfica.
Na interface gráfica será necessário incluir uma UIImageView, um Text Field e um Button. Fazer os relacionamentos e o resultado final será:
O projeto completo pode ser baixado aqui: testeimage