Batasan Parameter Tipe
Wajibkan kesesuaian pada parameter generik.
Batasan Parameter Tipe adalah pelajaran Swift Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. 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 4 pelajaran total.
Rangkuman Tipe Generik
Fungsi generik menggunakan parameter tipe seperti <T> agar dapat bekerja dengan banyak tipe. Namun, T tanpa batasan hanya dapat diteruskan, bukan diperiksa. Batasan membuka berbagai kemampuan.
func identity<T>(_ x: T) -> T { x }
print(identity(5))
print(identity("hi"))Batasan Kemampuan Membandingkan
Penulisan <T: Comparable> menjamin bahwa nilai T mendukung <, >, dan operator terkait, sehingga Anda dapat membandingkannya.
func largest<T: Comparable>(_ a: T, _ b: T) -> T {
a > b ? a : b
}
print(largest(3, 9))
print(largest("apple", "pear"))Mengapa Batasan Diperlukan
Tanpa Comparable, kompiler menolak a > b karena tidak semua tipe mendukung operasi tersebut. Batasan itu merupakan janji yang membuat operasi tersebut sah.
func minOf<T: Comparable>(_ list: [T]) -> T? {
list.min()
}
print(minOf([4, 2, 8])!)Batasan Kesetaraan
Equatable mengaktifkan == dan !=. Gunakan batasan ini untuk menghitung atau menemukan elemen yang cocok.
func count<T: Equatable>(_ x: T, in list: [T]) -> Int {
list.filter { $0 == x }.count
}
print(count(2, in: [2, 3, 2, 2]))Batasan Nilai Hash
Hashable memungkinkan Anda menggunakan nilai sebagai anggota Set atau kunci kamus.
func unique<T: Hashable>(_ list: [T]) -> [T] {
Array(Set(list))
}
print(unique([1, 1, 2, 3, 3]).sorted())Batasan Protokol
Protokol apa pun dapat menjadi batasan. Di sini, protokol khusus menyediakan akses ke metodenya pada parameter generik.
protocol Speaker { func speak() -> String }
struct Dog: Speaker { func speak() -> String { "Woof" } }
func announce<T: Speaker>(_ x: T) {
print(x.speak())
}
announce(Dog())Batasan Kelas
Anda dapat mengharuskan T mewarisi kelas tertentu, sehingga Anda mendapatkan akses ke anggota kelas tersebut.
class Animal { func name() -> String { "animal" } }
class Cat: Animal { override func name() -> String { "cat" } }
func describe<T: Animal>(_ x: T) { print(x.name()) }
describe(Cat())Beberapa Batasan
Gabungkan beberapa batasan dengan & untuk mewajibkan beberapa protokol sekaligus.
func show<T: CustomStringConvertible & Equatable>(_ a: T, _ b: T) {
print(a.description, a == b)
}
show(5, 5)Beberapa Parameter Tipe
Sebuah fungsi dapat memiliki beberapa parameter yang dibatasi, masing-masing dengan persyaratannya sendiri.
func zipMap<K: Hashable, V>(_ keys: [K], _ vals: [V]) -> [K: V] {
var d: [K: V] = [:]
for (k, v) in zip(keys, vals) { d[k] = v }
return d
}
print(zipMap(["a", "b"], [1, 2]))Batasan pada Tipe
Tipe generik, bukan hanya fungsi, juga dapat menerima batasan. Sebuah struktur generik dapat mengharuskan parameternya mematuhi protokol.
struct SortedBox<T: Comparable> {
var items: [T]
var smallest: T? { items.min() }
}
print(SortedBox(items: [5, 1, 9]).smallest!)Batasan Numerik
Protokol standar seperti Numeric memungkinkan kode generik melakukan aritmetika pada Int, Double, dan tipe lainnya.
func sum<T: Numeric>(_ list: [T]) -> T {
list.reduce(0, +)
}
print(sum([1, 2, 3]))
print(sum([1.5, 2.5]))Pemeriksaan Singkat
Uji pemahaman Anda tentang batasan parameter tipe.
Rangkuman
Batasan parameter tipe (<T: Protocol> atau <T: SomeClass>) memberi tahu kompiler apa yang dapat dilakukan tipe generik. Anda telah melihat Comparable, Equatable, Hashable, Numeric, protokol khusus, batasan kelas, beberapa batasan dengan &, serta batasan pada tipe generik.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Batasan Parameter Tipe” gratis?
Ya — teks lengkap “Batasan Parameter 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 4 pelajaran total.
Apa yang akan aku pelajari di “Batasan Parameter Tipe”?
Wajibkan kesesuaian pada parameter generik. 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 4.
Berapa lama pelajaran “Batasan Parameter 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
- Batasan Parameter Tipe
- Klausa where pada Fungsi
- Membatasi Tipe Terkait
- Subskrip dan Ekstensi Generik