0Pricing
Swift Academy · Pelajaran

Ekstensi protokol vs ekstensi tipe

Bandingkan ekstensi protokol (menambahkan implementasi bawaan ke protokol, bahkan secara kondisional) dengan ekstensi tipe (menambahkan API ke satu tipe konkret). Pahami perilaku dispatch dan batasannya.

Ekstensi protokol vs ekstensi 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.

Ikhtisar

Tujuan: Ketahui kapan menggunakan ekstensi protokol (perilaku bawaan untuk semua tipe yang memenuhi protokol) dibandingkan ekstensi tipe (API untuk satu tipe konkret). Kita juga akan membahas aturan pemanggilan.

Protokol dan pemenuhan

Protokol mendeklarasikan persyaratan. Tipe memenuhi protokol dengan menerapkan persyaratan tersebut.

protocol Greeter {
    func greet() -> String
}
struct Person: Greeter {
    var name: String
    func greet() -> String { "Hi, I'm \\(name)" }  // concrete requirement impl
}
print(Person(name: "Ada").greet())

Implementasi bawaan melalui ekstensi protokol

Ekstensi protokol dapat menyediakan implementasi bawaan yang digunakan oleh semua tipe yang memenuhi protokol, kecuali tipe tersebut menyediakan implementasinya sendiri.

protocol Describable {
    func describe() -> String
}
extension Describable {
    // default for ALL conformers until they override
    func describe() -> String { "No description" }
}

struct Car: Describable { }             // uses default
struct Book: Describable {
    func describe() -> String { "A book" } // custom override
}
print(Car().describe(), Book().describe())

API ekstensi tipe

Ekstensi tipe menambahkan metode/properti terhitung ke satu tipe konkret. Ekstensi tersebut tidak menambahkan properti tersimpan.

struct Point { var x: Int; var y: Int }

extension Point {
    // add helper just to Point
    var lengthSquared: Int { x*x + y*y }
    func moved(dx: Int, dy: Int) -> Point { Point(x: x+dx, y: y+dy) }
}
let p = Point(x: 2, y: 3)
print(p.lengthSquared, p.moved(dx: 1, dy: -1))

Ekstensi bersyarat

Tambahkan perilaku ke sebagian tipe yang memenuhi protokol dengan menggunakan klausa where pada ekstensi protokol.

protocol Summable { }
extension Int: Summable { }
extension Array where Element: Summable {
    // only for arrays whose elements conform to Summable
    func joinedCount() -> Int { self.count }
}
print([1,2,3].joinedCount())   // works (Int conforms)
 // print(["a","b"].joinedCount()) // not available

Perilaku pemanggilan (ikhtisar)

Aturan praktis: Jika metode merupakan persyaratan protokol dan tipe yang memenuhi protokol menerapkannya, implementasi tersebut yang digunakan (seperti pemanggilan dinamis). Metode yang hanya ditambahkan dalam ekstensi protokol (bukan persyaratan) dipanggil secara statis.

protocol Speaker { func speak() -> String }
extension Speaker { func speak() -> String { "default" } }

struct Cat: Speaker { }
struct Dog: Speaker {
    func speak() -> String { "woof" } // requirement impl overrides default
}

let s1: Speaker = Cat()
let s2: Speaker = Dog()
print(s1.speak()) // "default" (uses default impl)
print(s2.speak()) // "woof" (Dog provides requirement impl)

let c = Cat()
print(c.speak())  // "default" via extension on protocol

Ekstensi protokol dibandingkan ekstensi tipe

Pemeriksaan singkat: Apa perbedaan utamanya?

Rangkuman

Rangkuman: Gunakan ekstensi protokol untuk bawaan yang dapat digunakan kembali (secara opsional bersyarat). Gunakan ekstensi tipe untuk mengembangkan satu tipe. Ingat aturan pemanggilan: implementasi persyaratan mengesampingkan metode ekstensi bawaan.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Ekstensi protokol vs ekstensi tipe” gratis?

Ya — teks lengkap “Ekstensi protokol vs ekstensi 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 “Ekstensi protokol vs ekstensi tipe”?

Bandingkan ekstensi protokol (menambahkan implementasi bawaan ke protokol, bahkan secara kondisional) dengan ekstensi tipe (menambahkan API ke satu tipe konkret). Pahami perilaku dispatch dan batasan… 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 “Ekstensi protokol vs ekstensi 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

  1. Dasar Protokol & Ekstensi
  2. Ekstensi protokol vs ekstensi tipe
  3. Requirement statis vs instance
← Kembali ke Swift Academy