Portuguese (Português) translation by David Batista (you can also view the original English article)
Sobre o Swift
O Swift é uma impressionante linguagem de programação que a Apple apresentou durante o WWDC de 2014 e agora quase todos os desenvolvedores Apple estão usando ela para programar aplicativos iOS e OS X. Ela é muito flexível, mais fácil de usar que seu predecessor Objective C e ela irá poupar seu precioso tempo quando estiver codificando no Xcode.
Esta é a poderosa e intuitiva linguagem de programação para iOS, OS X, tvOS e watchOS. Codificar com Swift é interativo e divertido, a sintaxe é concisa e expressiva e o Swift inclui ferramentas modernas que os desenvolvedores amam. Se você ainda não esta usando o Swift, verifique alguns dos nossos outros grandes tutoriais sobre a linguagem Swift:
- iOSiOS do princípio com Swift: Criando seu primeiro aplicativo iOSBart Jacobs
- SwiftiOS do princípio com Swift: Swift em poucas palavrasBart Jacobs
- SwiftInstalando e rodando o Swift 2Derek Jensen
Sobre este tutorial
Na maioria das vezes, quando você constrói um app iOS com mais de uma tela, você precisa passar dados entre suas View Controllers para que elas compartilhem conteúdo sem ter perda ao longo do caminho. Neste tutorial, você aprenderá como fazer isso. Usaremos uma String
, um Integer
e também um UIImage
, então continue lendo - você ficará surpreso em como é fácil fazer isso com o Swift.
Configurando o projeto no Xcode
Primeiro de tudo, crie um novo projeto no Xcode. Escolha Single View Application e chame o projeto como quiser. Você encontrará um arquivo ViewController.swift na lista de arquivos no painel a esquerda e um controlador de interface no Storyboard.
Comece arrastando uma nova View Controller da biblioteca de objetos para o Storyboard.



Incorpore seu primeiro controlador em uma NavigationController
, assim quando você chamar o próximo controlador, a barra superior irá exibir um botão Back por padrão. Então selecione o primeiro controlador no Storyboard e clique em Editor > Embed in... > Navigation Controller.



Agora adicione uma UILabel
e um UIButton
no controlador. Você pode acha-los na biblioteca de objetos e arrasta-los para seu primeiro controlador. Dê um duplo clique na UILabel
e digite o texto que você deseja passar para o segundo controlador. Eu defini apenas "Text to pass".
No segundo Controlador, arraste uma nova UILabel
em qualquer lugar que você quiser e deixe o texto como esta.



Agora temos que criar um novo arquivo .swift e anexa-lo ao nosso segundo controlador. Sendo assim, clique com o botão direito no painel da lista de arquivos a esquerda, clique em New File... selecione Cocoa Touch Class na categoria iOS Source, clique em Next e chame a nova view controller de SecondVC
. (Espaços não são permitidos no nome e ele deve começar com uma letra maiúscula).






Agora você tem que conectar o segundo Controlador no Storyboard ao seu novo arquivo SecondVC.swift. Selecione o circulo amarelo no topo do controlador, clique no icone do painel Identify Inspector na direita da janela do Xcode e nos campos Class e StoryboardID digite o nome do seu novo arquivo .swift.



Conectando Views aos arquivos .swift
Divida a tela do Xcode em duas partes clicando no botão Assistant editor no canto superior direito. Agora você terá o Storyboard a esquerda e seu arquivo .swift na metade da direita.



Conecte a UILabel
com um IBOutlet
e o UIButton
com um IBAction
no seu arquivo .swift segurando o botão direito do mouse (ou segure o Control e o botão do mouse) na view e arraste a linha azul até a declaração da class
.
Quando você soltar o mouse, você poderá dar um nome para a outlet da label e para a ação do botão na pequena janela que aparecerá. Para o botão, certifique-se de clicar no combo box que diz Outlet e trocar para Action, pois precisamos que ele seja uma função e não um outlet.









Uma vez feita a conexão com todas as view, mantenha seu Xcode com a tela dividida em duas seções e selecione o primeiro controlador no Storyboard. Agora o lado direito irá exibir o arquivo ViewController.swift e você estará pronto para escrever os códigos nela.
Vamos ao código!
Coloque o seguinte código no método goButton()
.
let myVC = storyboard?.instantiateViewControllerWithIdentifier("SecondVC") as! SecondVC myVC.stringPassed = myLabel.text! navigationController?.pushViewController(myVC, animated: true)
Na primeira linha instânciamos o controlador SecondVC
do storyboard.
A segunda linha é o foco deste tutorial, ja que nela atribuímos o texto da myLabel
para a UILabel
que colocamos no controlador SecondVC
. Fazemos isso através da criação de uma String
que iremos declarar mais tarde.
Então finalmente, chamamos a view do próximo controller.
Passando uma String
Agora selecione o outro controlador no Storyboard e adicione esta variável abaixo da declaração da classe do SecondVC
.
var stringPassed = ""
Faça o app atribuir o valor dessa variável à secondLabel
com a seguinte linha de código no método viewDidLoad()
.
secondLabel.text = stringPassed
Pronto! Rode o app no Simulador iOS ou em um aparelho real, toque em GO! e você deve obter algo parecido com isso:



Como você pode ver, a String
Text to pass foi passada com sucesso para o nosso controlador SecondVC
.
Passando um inteiro
Agora vamos tentar adicionar um inteiro (Int
no Swift) e compartilhar entre os dois controladores.
Adicione a seguinte variável na ViewController.swift,
bem abaixo da declaração do outlet myLabel
.
var myInt = Int()
Inicialize seu valor na viewDidLoad()
:
override func viewDidLoad() { super.viewDidLoad() myInt = 5 }
Em seguida, edite a função goButton()
adicionando uma instância que também passaremos o meu valor myInt
para a próximo controlador, da seguinte forma:
let myVC = storyboard?.instantiateViewControllerWithIdentifier("SecondVC") as! SecondVC myVC.stringPassed = myLabel.text! myVC.intPassed = myInt navigationController?.pushViewController(myVC, animated: true)
Agora vá para a SecondVC.swift e primeiro adicione uma variável do tipo Int
que receberá o número que enviaremos do primeiro controlador. Coloque esta linha de código logo abaixo da variável stringPassed
.
var intPassed = Int()
Edite a linha de código da secondLabel
conforme abaixo:
secondLabel.text = stringPassed + " my Int: \(intPassed)"
Isso é tudo. Rode o app novamente e toque no botão GO! e você deve obter algo parecido com isso:



Então, agora você vê como é fácil passar variáveis de um controlador para outro. A última coisa que eu gostaria de te mostrar é como passar uma imagem.
Passando uma Image
Em seguida vamos adicionar uma imagem na pasta Assets do Xcode, um UIImageView em ambos os controllers e suas variáveis do tipo UIImage
.
Entre na pasta azul Assets.xcassets e crie uma nova Image Set.



Arraste as imagens 3x, 2x e 1x para suas respectivas caixas. Sinta-se livre para usar qualquer imagem. Eu irei usar um logo da Apple apenas como exemplo.



Volte para o primeiro controlador no Storyboard e arraste uma UIImageView
para qualquer lugar nele. Anexe sua imagem a ele usando o painel Attributes inspector e defina seu Mode para Aspect Fit.
Agora arraste um novo UIImageVIew
para o segundo controller e atribua seu Mode para Aspect Fit. Não anexe nenhuma image nele, ja que vamos passar a imagem do primeiro controlador!



Clique com o botão direito do mouse (ou seguro o Control e clique com o botão do mouse) e arraste uma linha azul para o primeiro controlador do arquivo .swift para declarar a IBOutlet
da sua UIImageView
. Faça a mesma coisa no segundo controlador.






Agora você tem que adicionar uma variável UIImage
no arquivo SecondVC.swift. Coloque ela abaixo da variável intPassed
.
var theImagePassed = UIImage()
Na viewDidLoad()
, pegue a imagem passada pelo primeiro controlador e exiba ela na imagePassed
.
imagePassed.image = theImagePassed
Por ultimo, edite o método goButton()
adicionando uma linha de código que irá passar a imagem do primeiro controlador para a UIImageVIew
do segundo. O método goButton()
completo ficará conforme a seguir.
let myVC = storyboard?.instantiateViewControllerWithIdentifier("SecondVC") as! SecondVC myVC.stringPassed = myLabel.text! myVC.intPassed = myInt myVC.theImagePassed = myImage.image! navigationController?.pushViewController(myVC, animated: true)
Rode o app, toque novamente no botão GO! e você deve ver algo parecido com isso:



Obrigado por me acompanhar! Eu espero que você esteja espantado com o quão fácil é trocar variáveis e imagens entre dois controladores. Por favor verifique nossos outros tutoriais sobre Xcode e Swift!