⌘ REFERENCIA · 59 elementos
Cheatsheet de Swift
El lenguaje entero en un sitio: tipos, opcionales, genéricos, concurrencia, memoria y metaprogramación. Busca por sintaxis o por lo que quieres hacer.
🍊 Sintaxis 6
Constante / variablelet x = 1 · var y = 2
Pattern matching en un ifif case .activo(let n) = estado
Salida tempranaguard let x else { return }
Ejecutar al salir del ámbitodefer { … }
Exhaustivo; puede ser expresiónswitch x { case … }
Bucle con pasofor i in stride(from:to:by:)
🧬 Tipos 7
Valor: se copiastruct P { }
Referencia: se comparte (identidad)class C { }
Tipo suma con valores asociadosenum E { case a(Int) }
Enum recursivo (árboles)indirect enum
Contrato con tipo asociadoprotocol P { associatedtype T }
Extensión condicionalextension P where Self: Q
Método que muta un structmutating func
❓ Opcionales y errores 8
Optional: some o noneInt?
Desenvolver con seguridadif let x · guard let x
Coalescencia nulax ?? valorPorDefecto
Encadenamiento opcionalx?.prop?.metodo()
Puede lanzar un errorfunc f() throws -> T
Typed throwsfunc f() throws(MiError)
Formas de manejar el fallotry? · try! · do/catch
El fallo como valorResult<T, E>
🔷 Genéricos 6
Parámetro con restricciónfunc f<T: Comparable>(_ x: T)
Restricción sobre tipo asociadowhere T.Element == U
Tipo opaco (despacho estático)some Protocolo
Existencial (despacho dinámico)any Protocolo
Conformidad condicionalextension Array: P where Element: P
Genéricos variádicoseach T (parameter packs)
🧮 Closures y funciones 6
Closure completo{ (x: Int) -> Int in x * 2 }
Forma abreviada{ $0 * 2 }
Lista de captura (rompe ciclos)[weak self] in
El closure sobrevive a la función@escaping
Envolver una expresión sin evaluar@autoclosure
Orden superiormap · filter · reduce · compactMap
🌀 Concurrencia 9
Función asíncronafunc f() async throws -> T
Punto de suspensiónlet x = await f()
Paralelismo declarativoasync let a = f()
Paralelismo dinámicowithTaskGroup(of:) { group in }
Estado protegido y serializadoactor Banco { }
Aislado al actor principal@MainActor
Puede cruzar fronteras de aislamientoSendable
AsyncSequencefor await x in stream
Cancelación cooperativaTask.checkCancellation()
🧠 Memoria 6
Referencia débil (opcional)weak var delegado
Sin retener; crash si muere antesunowned let padre
Base del copy-on-writeisKnownUniquelyReferenced(&x)
Modificadores de ownershipborrowing / consuming
Tipo no copiable (dueño único)~Copyable
Acceso crudo acotadowithUnsafeBytes { … }
🛠️ Metaprogramación 5
Envolver el acceso a una propiedad@propertyWrapper
Segunda cara del wrapperprojectedValue → $x
DSL declarativo (como SwiftUI)@resultBuilder
Macro de expresión: #macro@freestanding(expression)
Macro que añade miembros: @Macro@attached(member)
📦 Ecosistema 6
SPM desde la terminalswift build · run · test
Manifiesto del paquetePackage.swift
Control de acceso entre módulospackage / internal / public
Swift Testing@Test · #expect · #require
Build optimizadoswift build -c release
Ver la representación intermedia-emit-sil