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
7Las 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
falseUna 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 // bienMuchos 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.05Desafío
FácilDeclara 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)")
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