Menu
Coddy logo textTech

Miembros estáticos

Parte de la sección Programación orientada a objetos del Journey de Swift de Coddy. Lección 14 de 57.

Una propiedad static pertenece al tipo en sí, no a ninguna instancia. Hay exactamente una copia, a la que se accede mediante el nombre del tipo:

struct Temperature {
    static let freezing = 0.0
    static let boiling = 100.0
    var celsius: Double
}

print(Temperature.boiling - Temperature.freezing)

Salida:

100.0

Una static var puede cambiar, lo que la hace útil para datos compartidos por todas las instancias, como un contador de cuántas se han creado:

class Ticket {
    static var issued = 0
    let number: Int

    init() {
        Ticket.issued += 1
        number = Ticket.issued
    }
}

let a = Ticket()
let b = Ticket()
print(a.number)
print(b.number)
print(Ticket.issued)

Salida:

1
2
2

Una static func se llama en el tipo. No tiene ninguna instancia de self con la que trabajar, así que solo utiliza sus argumentos y otros miembros estáticos. Es un buen lugar para ayudantes y para formas con nombre de crear instancias:

struct Color {
    var red: Int
    var green: Int
    var blue: Int

    static func gray(_ level: Int) -> Color {
        Color(red: level, green: level, blue: level)
    }
}

let c = Color.gray(128)
print(c.red + c.green + c.blue)

Salida:

384

Dentro del tipo, Self es otra forma de nombrar el tipo, por lo que los miembros estáticos pueden escribirse como Self.issued. Los métodos de instancia pueden leer miembros estáticos, pero un método estático no puede leer propiedades de instancia, porque no se llama sobre una instancia.

struct Level {
    static let maximum = 10
    var current = 1
    func isMax() -> Bool { current == Self.maximum }   // instancia lee static
    static func describe() -> String { "levels 1-\(maximum)" } // static lee static
}
challenge icon

Desafío

Fácil

Completa la clase Order. Una propiedad estática nextId comienza en 1, y cada nuevo pedido toma el nextId actual como su id y lo incrementa. Una constante estática taxPercent es 10. El método de instancia total() devuelve el subtotal más el impuesto (redondeado hacia abajo), y el método estático summary(of:) recibe un arreglo de pedidos y devuelve 3 orders, 660 total.

El código proporcionado lee un subtotal por línea, crea un pedido para cada uno, imprime #1: 110 para cada pedido y, finalmente, imprime el resumen.

Tu código va en Order.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: déjalo tal como está
var input: [String] = []
while let line = readLine() { input.append(line) }
var orders: [Order] = []
for line in input {
    let order = Order(subtotal: Int(line)!)
    orders.append(order)
    print("#\(order.id): \(order.total())")
}
print(Order.summary(of: orders))
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