0Pricing
Swift Academy · Pelajaran

Kepatuhan kondisional

Buat tipe generik mematuhi protokol hanya jika parameter tipenya memenuhi batasan (misalnya, Box<T>: Equatable where T: Equatable ).

Kepatuhan kondisional adalah pelajaran Swift Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 3. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Swift Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Swift Academy mencakup 3 pelajaran total.

Mengapa kesesuaian bersyarat?

Kesesuaian bersyarat menambahkan kesesuaian protokol hanya ketika parameter tipe memenuhi batasan. Hal ini membuat API lebih tepat, menghindari kode berulang, dan berpadu secara kuat dengan pustaka standar.

Dasar tipe generik

Mulailah dengan tipe generik. Tanpa pekerjaan tambahan, Box tidak sesuai dengan Equatable/Hashable meskipun T sesuai.

struct Box<T> {
    var value: T
}
let bi = Box(value: 3)
let bs = Box(value: "hi")
// At this point Box has no Equatable/Hashable, regardless of T.

Equatable secara bersyarat

Tambahkan Equatable hanya jika T: Equatable. Kode yang membandingkan kotak dengan tipe non-Equatable tidak akan dikompilasi (keamanan yang baik).

extension Box: Equatable where T: Equatable {
    static func == (lhs: Box<T>, rhs: Box<T>) -> Bool {
        lhs.value == rhs.value
    }
}
print(Box(value: 5) == Box(value: 5))   // true
// Works because Int is Equatable
// print(Box(value: someNonEquatable) == ...) // won't compile

Hashable secara bersyarat

Demikian pula, terapkan Hashable hanya ketika elemennya Hashable. Setelah itu, Set/Dictionary dapat digunakan dengan Box<T>.

extension Box: Hashable where T: Hashable {
    func hash(into hasher: inout Hasher) {
        hasher.combine(value)
    }
}
let set: Set<Box<Int>> = [Box(value: 1), Box(value: 1)]
print(set.count)  // 1 because Hashable is available only when T: Hashable

Membatasi fitur dengan where

Gunakan extension ... where untuk menyediakan metode hanya bagi kemampuan tertentu (misalnya, T: Numeric), sehingga API dasar tetap kecil.

// Add extra APIs only when T supports them
extension Box where T: Numeric {
    func doubled() -> T { value + value }
}
print(Box(value: 7).doubled())     // 14 (Int is Numeric)
// Box(value: "hi").doubled()      // won't compile — String not Numeric

Terlihat di pustaka standar

Anda sudah menggunakan pola ini setiap hari:

  • Array: Equatable hanya ketika Element: Equatable.
  • Hashing Dictionary/Set hanya ketika kunci/elemen berupa Hashable.
  • Kesamaan Optional hanya ketika Wrapped: Equatable.

Manfaat: API akurat dan aman saat kompilasi.

Pemeriksaan definisi

Pemeriksaan singkat: Apa yang dimungkinkan oleh kesesuaian bersyarat?

Ringkasan

Ringkasan: Gunakan extension Type: Protocol where ... untuk menambahkan kesesuaian dan API hanya ketika batasan terpenuhi. Dengan demikian, kode tetap tepat, aman, dan mudah dipahami.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Kepatuhan kondisional” gratis?

Ya — teks lengkap “Kepatuhan kondisional” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Swift Academy, upgrade ke CoddyKit PRO. Kursus Swift Academy mencakup 3 pelajaran total.

Apa yang akan aku pelajari di “Kepatuhan kondisional”?

Buat tipe generik mematuhi protokol hanya jika parameter tipenya memenuhi batasan (misalnya, Box<T>: Equatable where T: Equatable ). Kamu berlatih Swift Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Swift Academy?

Tidak diperlukan pengalaman sebelumnya. Swift Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 3.

Berapa lama pelajaran “Kepatuhan kondisional” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Swift Academy ini?

Ya. Setiap pelajaran Swift Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Kepatuhan kondisional
  2. Batasan rekursif & generik tingkat tinggi
  3. Klausa where pada ekstensi
← Kembali ke Swift Academy