Menu
Coddy logo textTech

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
412

Cada 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 30

Una 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.0
challenge icon

Desafío

Fácil

Escribe 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())
quiz iconPonte a prueba

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

Practica por tu cuenta: Playground de Swift