Swift Academy · Pelajaran

Contoh praktikal tanpa rangka kerja UI

Tulis DSL kecil yang berguna tanpa UI: fail konfigurasi, pembina pertanyaan ringkas, pemancar teks/Markdown, serta saluran paip pengesahan dengan @resultBuilder .

Pelajaran 3 daripada 38 langkah

Contoh praktikal tanpa rangka kerja UI ialah pelajaran Swift Academy percuma di CoddyKit. Ini ialah pelajaran 3 daripada 3. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Swift Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Swift Academy merangkumi sejumlah 3 pelajaran.

Pembina hasil bukan antara muka pengguna

Anda boleh membina DSL yang berguna untuk banyak tugas selain antara muka pengguna. Kami akan membina pembina config, pertanyaan, teks dan pengesahan. Pastikan setiap satunya kecil dan tertumpu.

Pembina config

Pembina config mengumpulkan tupel ringkas ke dalam kamus. Tapak panggilan kemas dan mudah diimbas.

@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")

Pembina pertanyaan

Pembina pertanyaan menggabungkan klausa dengan AND. Kami menyokong syarat dan gelung melalui cangkuk pembina.

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)

Pembina teks/Markdown

Pembina teks menghasilkan satu rentetan. Fungsi pembantu seperti h2 dan bullet memastikan blok mudah dibaca.

@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)

Pembina pengesahan

Kumpulkan rules pengesahan kemudian jalankannya sebagai saluran pemprosesan. Blok kekal deklaratif; pelaksanaan berlaku kemudian.

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)

Petua reka bentuk

Petua:

  • Mulakan dengan buildBlock; tambah sokongan pilihan/susunan hanya apabila diperlukan.
  • Pastikan jenis yang dihasilkan mudah: rentetan, tatasusunan dan struktur kecil.
  • Sediakan satu fungsi titik masuk bagi setiap DSL (contohnya, config, md).
  • Dokumentasikan pernyataan yang dibenarkan dan peraturan pelolosan.

Kes penggunaan pembina bukan antara muka pengguna

Semakan ringkas: Pilih satu kegunaan bukan antara muka pengguna yang sesuai untuk pembina:

Rumusan

Rumusan: Pembina hasil sangat sesuai untuk masukan berstruktur—konfigurasi, pertanyaan, teks dan pengesahan. Pastikan pembina ini minimum, mudah dibaca dan mempunyai lingkungan yang jelas.

Percuma untuk bermula

Pelajari Swift dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
122
Pelajaran
409

Soalan Lazim

Adakah pelajaran “Contoh praktikal tanpa rangka kerja UI” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Swift Academy, termasuk “Contoh praktikal tanpa rangka kerja UI”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Swift Academy merangkumi sejumlah 3 pelajaran.

Apakah yang akan saya pelajari dalam “Contoh praktikal tanpa rangka kerja UI”?

Tulis DSL kecil yang berguna tanpa UI: fail konfigurasi, pembina pertanyaan ringkas, pemancar teks/Markdown, serta saluran paip pengesahan dengan @resultBuilder . Anda berlatih Swift Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Swift Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Swift Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 3.

Berapa lamakah pelajaran “Contoh praktikal tanpa rangka kerja UI” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Swift Academy ini?

Ya. Setiap pelajaran Swift Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Membina DSL mini dengan pembina hasil
  2. API berskop dan corak kebolehbacaan
  3. Contoh praktikal tanpa rangka kerja UI
← Kembali ke Swift Academy