Back-End

28 out, 2014

Falando sobre Swift – Classes

100 visualizações
Publicidade

Neste capítulo da série sobre Swift, vamos falar sobre Classes. Confira o anterior aqui.

Swift é uma linguagem com suporte para conceitos funcionais e orientados a objetos. Classes são definidas com a palavra-chave class e o corpo é cheio de chaves.

Objetos podem ter instâncias variáveis especificadas com var ou constants com let dentro do bloco. Assim como com outras variáveis, o tipo pode ser declarado explicitamente ou inferido por um valor inicial:

Welcome to Swift!  Type :help for assistance.
  1> class Person {
  2.   var firstName = ""
  3.   var lastName:String?
  4. }

Valores não-opcionais precisam ser inicializados in-line, ou em um inicializador.

Uma vez que a classe esteja definida, ela pode ser criada usando um tipo construtor. Propriedades de instância podem ser acessadas utilizando a sintaxe de ponto:

  5> var alex = Person()
alex: Person = {
  firstName = ""
  lastName = nil
}
  6> alex.firstName = "Alex"
  7> alex
$R0: Person = {
  firstName = "Alex"
  lastName = nil
}

Tipos de classe utilizam uma semântica de passagem por referência; duas variáveis podem apontar para a mesma instância. Então, se uma variável é utilizada para mudar o valor, esse valor será observado na outra variável.

  8> var alblue = alex
alblue: Person = {
  firstName = "Alex"
  lastName = nil
}
  9> alblue.firstName = "AlBlue"
 10> alex.firstName
$R1: String = "AlBlue"

Funções de instância podem ser adicionadas à uma classe. Como resultado, é possível adicionar um método fullName que retorne a concatenação do primeiro e do último nome:

11> class Person {
 12.   var firstName = ""
 13.   var lastName:String?
 14.   func fullName() -> String {
 15.     return "\(firstName) \(lastName!)"
 16.   }
 17. }

 18> var alex = Person()
$R2: Person = {
  firstName = ""
  lastName = nil
}

 19> alex.firstName = "Alex"
 20> alex.lastName = "Blewitt"
 21> alex.fullName()
$R3: String = "Alex Blewitt"

Um tipo especial de função pode ser criado para ser utilizado em tempo de criação da classe, chamado de inicializador. Campos podem ser definidos no inicializador para não ser necessário inicializá-los durante a declaração. Entretanto, eles precisam ser declarados do ponto de vista do tipo.

22> class Person {
 23.   var firstName:String
 24.   var lastName:String
 25.   init(first:String, last:String) {
 26.     firstName = first
 27.     lastName = last
 28.   }
 29.   func fullName() -> String {
 30.     return "\(firstName) \(lastName)"
 31.   }
 32. }

 33> Person()
error: missing argument for parameter 'first' in call
Person()
      ^

 33> Person(first:"Alex", last:"Blewitt")
$R4: Person = {
  firstName = "Alex"
  lastName = "Blewitt"
}

Os argumentos são implicitamente nomeados; se você tentar chamá-los sem passar seus nomes (como em Person(“Alex”, “Blewitt”)), o swift vai reclamar que os nomes estão faltando. Isso pode ser resolvido com um underscore _ em frente dos nomes com init, que vai instruir o swift a não considerá-los nomeados:

Depois falaremos com mais detalhes sobre classes. No próximo artigo, veremos como criar structs no Swift. Até lá!

***

Artigo traduzido pela Redação iMasters com autorização do autor. Publicado originalmente em http://alblue.bandlem.com/2014/10/swift-classes-overview.html