Pematuhan bersyarat
Jadikan jenis generik mematuhi protokol hanya jika parameter jenisnya memenuhi kekangan (contohnya, Box<T>: Equatable where T: Equatable ).
Pematuhan bersyarat ialah pelajaran Swift Academy percuma di CoddyKit. Ini ialah pelajaran 1 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.
Mengapa pematuhan bersyarat?
Pematuhan bersyarat menambahkan pematuhan protokol hanya apabila parameter jenis memenuhi kekangan. Ini memastikan API tepat, mengelakkan kod berulang, dan bergabung dengan berkesan dengan pustaka standard.
Asas jenis generik
Mulakan dengan jenis generik. Tanpa kerja tambahan, Box tidak mematuhi kesamaan/kebolehcincangan walaupun T mematuhinya.
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.Kesamaan secara bersyarat
Tambahkan kesamaan hanya jika T: Equatable. Kod yang membandingkan kotak bagi jenis yang tidak mempunyai kesamaan tidak akan dikompil (keselamatan 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 compileKebolehcincangan secara bersyarat
Begitu juga, gunakan kebolehcincangan hanya apabila elemennya boleh dicincang. Kemudian Set/Dictionary boleh 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: HashableMengawal ciri dengan syarat
Gunakan peluasan ... apabila untuk mendedahkan kaedah hanya bagi keupayaan tertentu (contohnya, T: Numeric), sambil memastikan API asas 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 NumericDilihat dalam pustaka standard
Anda sudah menggunakan perkara ini setiap hari:
- Tatasusunan: kesamaan hanya apabila
Element: Equatable. - Kamus/set hanya menggunakan pencincangan apabila kunci/elemen ialah
Hashable. - Pilihan hanya mempunyai kesamaan apabila
Wrapped: Equatable.
Manfaat: API adalah tepat dan selamat semasa kompilasi.
Semakan definisi
Semakan ringkas: Apakah yang dibenarkan oleh pematuhan bersyarat?
Ringkasan
Ringkasan: Gunakan peluasan Jenis: Protokol apabila ... untuk menambahkan pematuhan dan API hanya apabila kekangan dipenuhi. Ini memastikan kod tepat, selamat dan mudah difahami.
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 “Pematuhan bersyarat” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Swift Academy, termasuk “Pematuhan bersyarat”, 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 “Pematuhan bersyarat”?
Jadikan jenis generik mematuhi protokol hanya jika parameter jenisnya memenuhi kekangan (contohnya, Box<T>: Equatable where T: Equatable ). 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 1 daripada 3.
Berapa lamakah pelajaran “Pematuhan bersyarat” 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
- Pematuhan bersyarat
- Kekangan rekursif dan generik tertib lebih tinggi
- Klausa where pada sambungan