Inicializadores
Parte da seção Programação Orientada a Objetos do Journey de Swift da Coddy. Lição 4 de 57.
Um inicializador, escrito como init, é executado quando uma instância é criada e atribui os valores iniciais às propriedades. Seus parâmetros tornam-se os argumentos da chamada do tipo:
class Book {
var title: String
var pages: Int
init(title: String, pages: Int) {
self.title = title
self.pages = pages
}
}
let book = Book(title: "Dune", pages: 412)
print(book.title)
print(book.pages)Saída:
Dune
412Cada propriedade precisa de um valor antes que a instância possa ser usada. Uma propriedade sem um valor padrão deve ser definida em init, caso contrário, a classe não compila. Uma propriedade declarada com let pode ser definida uma vez em init e nunca mais ser alterada:
class Book {
let isbn: String // definido uma vez, no init
var title: String
init(isbn: String, title: String) {
self.isbn = isbn
self.title = title
}
}Os parâmetros de init podem ter valores padrão, portanto os chamadores fornecem apenas o que for diferente:
class Timer {
var seconds: Int
var label: String
init(seconds: Int, label: String = "timer") {
self.seconds = seconds
self.label = label
}
}
let egg = Timer(seconds: 300, label: "egg")
let quick = Timer(seconds: 30)
print("\(egg.label) \(egg.seconds)")
print("\(quick.label) \(quick.seconds)")Saída:
egg 300
timer 30Uma classe pode ter mais de um inicializador, cada um com parâmetros diferentes. Um convenience init preenche alguns valores e chama o principal com self.init(...):
class Temperature {
var celsius: Double
init(celsius: Double) {
self.celsius = celsius
}
convenience init(fahrenheit: Double) {
self.init(celsius: (fahrenheit - 32) * 5 / 9)
}
}
print(Temperature(celsius: 20).celsius)
print(Temperature(fahrenheit: 212).celsius)Saída:
20.0
100.0Desafio
FácilEscreva o inicializador da classe Account. Ele recebe owner e um balance opcional cujo valor padrão é 0, e armazena ambos. Em seguida, conclua summary(), que retorna Ada has 150.
O código fornecido lê um proprietário e, quando uma segunda linha está presente, um saldo inicial. Ele cria a conta com ou sem o saldo e imprime summary().
Seu código deve estar em Account.swift. main.swift contém o código fornecido de entrada/saída e não pode ser editado.
Experimente você mesmo
// Código de entrada/saída fornecido: mantenha-o como está
var input: [String] = []
while let line = readLine() { input.append(line) }
let account = input.count > 1 ? Account(owner: input[0], balance: Int(input[1])!) : Account(owner: input[0])
print(account.summary())
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Programação Orientada a Objetos
1Classes e Objetos
Trabalhando com ArquivosDefinindo ClassesMétodos e selfInicializadoresClasses são ReferênciasRevisão - Cartão da Biblioteca4Encapsulamento
Controle de AcessoSomente Leitura ExternaProtegendo o EstadoInicializadores que Podem FalharRevisão - Conta Bancária7Polimorfismo e Genéricos
PolimorfismoConversão de TiposFunções GenéricasTipos GenéricosRevisão - Calculadora de Formas2Structs e Tipos de Valor
StructsSemântica de ValorMétodos MutáveisStruct ou ClasseRecapitulação - Item de Inventário5Herança
SubclassesSobrescrita de métodosInicializadores e superfinal e hierarquiasRecapitulação - Hierarquia de funcionários8Protocolos Padrão
CustomStringConvertibleEquatableComparableHashableRecapitulação - Ordenação Personalizada11Projeto: Gerenciamento de Biblioteca
Livros e MembrosEmpréstimo de LivrosPratique por conta própria: Playground de Swift