Menu
Coddy logo textTech

Structs

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

Un struct agrupa datos y métodos como una clase. Swift escribe un inicializador miembro a miembro para cada struct, con un parámetro por propiedad, por lo que un struct no necesita su propio init:

struct Point {
    var x: Int
    var y: Int

    func distanceFromOrigin() -> Int {
        abs(x) + abs(y)
    }
}

let p = Point(x: 3, y: -4)
print(p.x)
print(p.distanceFromOrigin())

Salida:

3
7

Las propiedades con valores predeterminados pueden omitirse del inicializador miembro a miembro:

struct Settings {
    var volume = 5
    var muted = false
}

let quiet = Settings(volume: 1)
print(quiet.volume)
print(quiet.muted)

Salida:

1
false

Una estructura almacenada en una constante let no puede cambiar en absoluto, ni siquiera sus propiedades var. Almacénala en una var para cambiarla:

let fixed = Point(x: 1, y: 2)
// fixed.x = 5    // error: no se puede asignar, fixed es una constante let

var moving = Point(x: 1, y: 2)
moving.x = 5       // bien

Muchos de los tipos propios de Swift son estructuras: Int, Double, String, Array y Dictionary. Tus estructuras se comportan de la misma manera que esos tipos: son valores simples.

struct Money {
    var cents: Int
    func formatted() -> String {
        "\(cents / 100).\(cents % 100 < 10 ? "0" : "")\(cents % 100)"
    }
}

print(Money(cents: 1250).formatted())
print(Money(cents: 305).formatted())

Salida:

12.50
3.05
challenge icon

Desafío

Fácil

Declara una estructura Item con las propiedades name (String), price (Int, en centavos) y quantity (Int). Añade un método total() que devuelva el precio multiplicado por la cantidad, y un método line() que devuelva 2 x tea = 350.

El código proporcionado lee un elemento por línea como name,price,quantity, crea cada Item con el inicializador miembro a miembro e imprime line(). Después imprime sum: y la suma de todos los totales.

Tu código va en Item.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 como está
var input: [String] = []
while let line = readLine() { input.append(line) }
var sum = 0
for row in input {
    let p = row.split(separator: ",").map(String.init)
    let item = Item(name: p[0], price: Int(p[1])!, quantity: Int(p[2])!)
    print(item.line())
    sum += item.total()
}
print("sum: \(sum)")
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