0Pricing
Swift Academy · Lección

Ejemplos prácticos sin frameworks de UI

Escriba DSL pequeños y útiles sin UI: archivos de configuración, constructores de consultas sencillos, emisores de texto/Markdown y canalizaciones de validación con @resultBuilder .

Ejemplos prácticos sin frameworks de UI es una lección gratuita de Swift Academy en CoddyKit. Esta es la lección 3 de 3. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Swift Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Swift Academy incluye 3 lecciones en total.

Constructores de resultados no relacionados con la interfaz de usuario

Puede crear DSL útiles para muchas tareas además de la interfaz de usuario. Crearemos constructores de configuración, consultas, texto y validación. Mantenga cada uno pequeño y enfocado.

Constructor de configuración

Un constructor de configuración reúne tuplas sencillas en un diccionario. Los sitios de llamada son ordenados y fáciles de leer.

@resultBuilder
struct ConfigBuilder {
    static func buildBlock(_ parts: (String,String)...) -> [String:String] {
        var dict: [String:String] = [:]
        for (k,v) in parts { dict[k] = v }
        return dict
    }
}
func config(@ConfigBuilder _ body: () -> [String:String]) -> [String:String] { body() }

// Use it:
let cfg = config {
    ("ENV", "debug")
    ("API_URL", "https://api.example.com")
    ("RETRY", "3")
}
print(cfg["API_URL"] ?? "missing")

Constructor de consultas

Un constructor de consultas une cláusulas con AND. Admitimos if/else y bucles mediante los puntos de extensión del constructor.

struct Where { let clauses: [String] }
@resultBuilder
struct WhereBuilder {
    static func buildBlock(_ parts: String...) -> Where { Where(clauses: parts) }
    static func buildArray(_ parts: [String]) -> Where { Where(clauses: parts) }
    static func buildEither(first: Where) -> Where { first }
    static func buildEither(second: Where) -> Where { second }
}
func whereClauses(@WhereBuilder _ body: () -> Where) -> Where { body() }

func select(_ table: String, where w: Where) -> String {
    let filter = w.clauses.isEmpty ? "" : " WHERE " + w.clauses.joined(separator: " AND ")
    return "SELECT * FROM \(table)\(filter);"
}

// Use:
let isProd = false
let q = select("users", where: whereClauses {
    "age > 18"
    if isProd { "status = 'active'" } else { "status <> 'deleted'" }
})
print(q)

Constructor de texto/Markdown

Un constructor de texto emite un único String. Los auxiliares como h2 y bullet mantienen legible el bloque.

@resultBuilder
struct TextBuilder {
    static func buildBlock(_ parts: String...) -> String { parts.joined(separator: "\n") }
    static func buildEither(first: String) -> String { first }
    static func buildEither(second: String) -> String { second }
    static func buildArray(_ parts: [String]) -> String { parts.joined(separator: "\n") }
}
func md(@TextBuilder _ body: () -> String) -> String { body() }

func h2(_ s: String) -> String { "## " + s }
func bullet(_ s: String) -> String { "- " + s }

let doc = md {
    h2("Release Notes")
    bullet("Faster build")
    bullet("Smaller binary")
}
print(doc)

Constructor de validación

Reúna reglas de validación y ejecútelas después como una canalización. El bloque se mantiene declarativo; la ejecución ocurre más tarde.

struct ValidationResult { let ok: Bool; let messages: [String] }

typealias Rule = (String) -> String?   // nil = OK; otherwise error message

@resultBuilder
struct RulesBuilder {
    static func buildBlock(_ parts: Rule...) -> [Rule] { parts }
    static func buildArray(_ parts: [[Rule]]) -> [Rule] { parts.flatMap { $0 } }
}
func rules(@RulesBuilder _ body: () -> [Rule]) -> [Rule] { body() }

func validate(_ input: String, with rules: [Rule]) -> ValidationResult {
    var msgs: [String] = []
    for r in rules { if let m = r(input) { msgs.append(m) } }
    return ValidationResult(ok: msgs.isEmpty, messages: msgs)
}

// Use:
let rs = rules {
    { $0.isEmpty ? "Must not be empty" : nil }
    { $0.count < 3 ? "Too short" : nil }
}
let out = validate("hi", with: rs)
print(out.ok, out.messages)

Consejos de diseño

Consejos:

  • Comience con buildBlock; añada either/array solo cuando sea necesario.
  • Mantenga sencillos los tipos emitidos: String, arreglos y estructuras pequeñas.
  • Proporcione una función de entrada por DSL (por ejemplo, config, md).
  • Documente las instrucciones permitidas y las reglas de escape.

Caso de uso de un constructor no relacionado con la interfaz de usuario

Comprobación rápida: Elija un uso sólido de un constructor que no esté relacionado con la interfaz de usuario:

Resumen

Resumen: Los constructores de resultados son especialmente útiles para entradas estructuradas: configuraciones, consultas, texto y validación. Manténgalos mínimos, legibles y con un alcance bien definido.

Preguntas frecuentes

¿La lección «Ejemplos prácticos sin frameworks de UI» es gratis?

Sí — el texto completo de «Ejemplos prácticos sin frameworks de UI» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Swift Academy, actualiza a CoddyKit PRO. El curso de Swift Academy incluye 3 lecciones en total.

¿Qué aprenderé en «Ejemplos prácticos sin frameworks de UI»?

Escriba DSL pequeños y útiles sin UI: archivos de configuración, constructores de consultas sencillos, emisores de texto/Markdown y canalizaciones de validación con @resultBuilder . Practicas Swift Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Swift Academy?

No se requiere experiencia previa. Swift Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 3.

¿Cuánto tiempo toma la lección «Ejemplos prácticos sin frameworks de UI»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Swift Academy?

Sí. Cada lección de Swift Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Crear mini-DSL con result builders
  2. API con ámbito y patrones de legibilidad
  3. Ejemplos prácticos sin frameworks de UI
← Volver a Swift Academy