Batasan (where), inferensi tipe
Batasi kode generik menggunakan where (misalnya, batasan Equatable/Comparable atau Element), dan lihat cara Swift menginferensikan tipe generik saat pemanggilan.
Batasan (where), inferensi tipe adalah pelajaran Swift Academy gratis di CoddyKit. Ini adalah pelajaran 2 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 menggunakan batasan?
Tambahkan batasan agar kode generik dapat menggunakan operasi tertentu (seperti == atau <). Setelah itu, inferensi tipe Swift memilih tipe konkret saat pemanggilan.
Batasan Equatable
where T: Equatable mengizinkan pemeriksaan kesamaan. Tanpa batasan ini, == tidak tersedia untuk T mana pun.
// Find the first index of value in an array of T
func indexOf<T>(_ value: T, in array: [T]) -> Int? where T: Equatable {
for (i, x) in array.enumerated() {
if x == value { return i } // allowed because T: Equatable
}
return nil
}
print(indexOf(3, in: [1,2,3,2]) ?? -1) // 2
print(indexOf("b", in: ["a","b","c"]) ?? -1) // 1Batasan Comparable
Penggunaan batasan seperti T: Comparable mengaktifkan operasi pengurutan seperti <.
// Return the minimum value of a collection when elements are Comparable
func minimum<T: Comparable>(_ xs: [T]) -> T? {
guard var best = xs.first else { return nil }
for x in xs.dropFirst() {
if x < best { best = x }
}
return best
}
print(minimum([7,3,9]) ?? -1) // 3
print(minimum(["b","a","c"]) ?? "?") // "a"Ekstensi dengan where
Gunakan where Element: ... untuk menambahkan API hanya bagi tipe elemen tertentu (di sini, array yang Equatable).
// Add a helper only when the array's Element is Equatable
extension Array where Element: Equatable {
func removingDuplicates() -> [Element] {
var seen: [Element] = []
for x in self {
if !seen.contains(x) { seen.append(x) }
}
return seen
}
}
print([1,2,2,3].removingDuplicates()) // [1,2,3]Beberapa batasan
Gabungkan beberapa batasan: batasi tipe generik dan tipe terkait miliknya (misalnya, S.Element: Equatable).
// Require both Sequence and Equatable elements; force same-type relationship
func allEqual<S>(_ s: S) -> Bool
where S: Sequence, S.Element: Equatable {
var it = s.makeIterator()
guard let first = it.next() else { return true }
while let v = it.next() { if v != first { return false } }
return true
}
print(allEqual([2,2,2])) // true
print(allEqual([1,2,1])) // falseInferensi dalam praktik
Swift menginferensikan parameter generik dari argumen dan konteks, sehingga Anda jarang perlu menentukan <T> secara eksplisit.
// Inference: compiler deduces concrete types
let i = indexOf(10, in: [5,10,15]) // T is Int
let j = minimum(["z","x"]) // T is String
print(i ?? -1, j ?? "")Arti where
Pemeriksaan cepat: Apa fungsi klausa where?
Ringkasan
Ringkasan: Batasi generik dengan where (misalnya, T: Equatable dan Element: Comparable), lalu andalkan inferensi tipe Swift untuk memilih tipe konkret saat pemanggilan.
Belajar Swift dengan tutor AI — gratis
Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.
- Kursus
- 122
- Pelajaran
- 409
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Batasan (where), inferensi tipe” gratis?
Ya — teks lengkap “Batasan (where), inferensi tipe” 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 “Batasan (where), inferensi tipe”?
Batasi kode generik menggunakan where (misalnya, batasan Equatable/Comparable atau Element), dan lihat cara Swift menginferensikan tipe generik saat pemanggilan. 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 2 dari 3.
Berapa lama pelajaran “Batasan (where), inferensi tipe” 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
- Fungsi & tipe generik
- Batasan (where), inferensi tipe
- Algoritme generik pada koleksi