Inicializadores
Parte de la sección Programación orientada a objetos del Journey de Swift de Coddy. Lección 4 de 57.
Un inicializador, escrito como init, se ejecuta cuando se crea una instancia y asigna a las propiedades sus valores iniciales. Sus parámetros se convierten en los argumentos de la llamada al 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)Salida:
Dune
412Cada propiedad necesita un valor antes de que se pueda usar la instancia. Una propiedad sin un valor predeterminado debe establecerse en init, o la clase no se compila. Una propiedad declarada con let se puede establecer una vez en init y nunca cambiar después:
class Book {
let isbn: String // se establece una vez, en init
var title: String
init(isbn: String, title: String) {
self.isbn = isbn
self.title = title
}
}Los parámetros de init pueden tener valores predeterminados, por lo que quienes llaman solo proporcionan lo que difiere:
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)")Salida:
egg 300
timer 30Una clase puede tener más de un inicializador, cada uno con parámetros diferentes. Un convenience init completa algunos valores y llama al principal con 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)Salida:
20.0
100.0Desafío
FácilEscribe el inicializador de la clase Account. Recibe owner y un balance opcional cuyo valor predeterminado es 0, y almacena ambos. Después completa summary(), que devuelve Ada has 150.
El código proporcionado lee un propietario y, cuando hay una segunda línea, un saldo inicial. Crea la cuenta con o sin el saldo e imprime summary().
Tu código va en Account.swift. main.swift contiene el código proporcionado de entrada/salida y no se puede editar.
Pruébalo tú mismo
// Código de entrada/salida suministrado: mantenlo tal cual
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 lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Programación orientada a objetos
1Clases y objetos
Trabajar con archivosDefinir clasesMétodos y selfInicializadoresLas clases son referenciasRepaso: tarjeta de biblioteca4Encapsulación
Control de accesoSolo lectura desde fueraProtección del estadoInicializadores que pueden fallarRepaso - Cuenta bancaria7Polimorfismo y genéricos
PolimorfismoConversión de tiposFunciones genéricasTipos genéricosRepaso - Calculadora de formas2Structs y tipos por valor
StructsSemántica de valoresMétodos mutablesStruct o claseRepaso - elemento del inventario5Herencia
SubclasesSobrescritura de métodosInicializadores y superfinal y jerarquíasRepaso: jerarquía de empleados8Protocolos estándar
CustomStringConvertibleEquatableComparableHashableRepaso - Ordenamiento personalizado11Proyecto: Gestión de bibliotecas
Libros y miembrosPréstamo de librosPractica por tu cuenta: Playground de Swift