0Pricing
Swift Academy · Pelajaran

Implementasi Bawaan dalam Ekstensi

Sediakan perilaku bersama melalui ekstensi protocol.

Implementasi Bawaan dalam Ekstensi adalah pelajaran Swift Academy gratis di CoddyKit. Ini adalah pelajaran 2 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.

Masalahnya

Protokol mendeklarasikan persyaratan, tetapi tidak menyediakan perilaku. Jika setiap tipe yang mematuhinya harus mengulangi logika yang sama, Anda akan menggandakan kode. Ekstensi protokol mengatasi hal ini dengan menyediakan implementasi bawaan.

protocol Greeter {
    func greet() -> String
}

Menambahkan Bawaan

Ekstensi pada protokol dapat mengimplementasikan suatu persyaratan. Tipe yang mematuhi protokol memperoleh perilaku tersebut secara otomatis, kecuali menimpanya.

protocol Greeter { func greet() -> String }

extension Greeter {
    func greet() -> String { "Hello!" }
}

struct Robot: Greeter {}
print(Robot().greet())

Menimpa Bawaan

Tipe yang mematuhi protokol dapat menyediakan implementasinya sendiri, yang diprioritaskan daripada bawaan dari ekstensi.

protocol Greeter { func greet() -> String }
extension Greeter { func greet() -> String { "Hello!" } }

struct French: Greeter {
    func greet() -> String { "Bonjour!" }
}
print(French().greet())

Menambahkan Metode Tambahan

Ekstensi dapat menambahkan metode baru yang sama sekali tidak terdapat dalam protokol. Setiap tipe yang mematuhi protokol akan mendapatkannya secara otomatis.

protocol Named { var name: String { get } }

extension Named {
    func loudName() -> String { name.uppercased() }
}

struct City: Named { let name: String }
print(City(name: "paris").loudName())

Properti Terhitung Bawaan

Ekstensi juga dapat menyediakan properti terhitung sebagai bawaan.

protocol Sized {
    var width: Double { get }
    var height: Double { get }
}

extension Sized {
    var area: Double { width * height }
}

struct Rect: Sized { let width: Double; let height: Double }
print(Rect(width: 2, height: 5).area)

Membangun berdasarkan Persyaratan

Implementasi bawaan dapat memanggil persyaratan milik protokol itu sendiri, sehingga menghasilkan perilaku yang lebih kaya dari kontrak minimal yang harus disediakan setiap tipe.

protocol Summable {
    var values: [Int] { get }
}

extension Summable {
    var total: Int { values.reduce(0, +) }
}

struct Cart: Summable { let values: [Int] }
print(Cart(values: [10, 20, 30]).total)

Ekstensi dengan Batasan

Gunakan klausa where agar bawaan hanya berlaku ketika kondisi tambahan terpenuhi. Di sini, bawaan hanya ada ketika Self juga Equatable.

protocol Container {
    associatedtype Item
    var items: [Item] { get }
}

extension Container where Item: Equatable {
    func contains(_ x: Item) -> Bool { items.contains(x) }
}

struct Bag: Container { let items: [Int] }
print(Bag(items: [1, 2, 3]).contains(2))

Bawaan + Persyaratan Bersamaan

Anda dapat mendeklarasikan metode dalam protokol AND menyediakan bawaan. Mencantumkannya dalam protokol memungkinkan pemanggilan dinamis melalui tipe protokol.

protocol Logger {
    func log() -> String
}
extension Logger {
    func log() -> String { "default log" }
}

struct A: Logger {}
struct B: Logger { func log() -> String { "B log" } }

let loggers: [Logger] = [A(), B()]
for l in loggers { print(l.log()) }

Hal yang Perlu Diwaspadai pada Pemanggilan Statis

Jika suatu metode HANYA terdapat dalam ekstensi, bukan dalam protokol, pemanggilan melalui nilai bertipe protokol menggunakan versi dari ekstensi, meskipun tipe konkretnya mendefinisikan versinya sendiri. Deklarasikan metode tersebut dalam protokol agar pemanggilan dinamis dapat digunakan.

protocol P {}
extension P { func who() -> String { "P-default" } }
struct Q: P { func who() -> String { "Q" } }

let direct = Q()
let asP: P = Q()
print(direct.who())
print(asP.who())

Mengurangi Kode Berulang

Gabungan antara permukaan persyaratan yang kecil dan bawaan yang kaya merupakan inti desain berorientasi protokol: tipe yang mematuhi protokol mengimplementasikan kebutuhan minimum, sedangkan perilaku bersama ditempatkan di satu lokasi.

protocol Identifiable { var id: Int { get } }
extension Identifiable {
    var tag: String { "ID-" + String(id) }
}
struct Order: Identifiable { let id: Int }
print(Order(id: 7).tag)

Menggabungkan Beberapa Ekstensi

Anda dapat membagi bawaan ke dalam beberapa ekstensi agar lebih terorganisasi; semuanya berkontribusi pada tipe yang mematuhi protokol.

protocol Money { var cents: Int { get } }
extension Money { var dollars: Double { Double(cents) / 100 } }
extension Money { var label: String { "$" + String(format: "%.2f", dollars) } }

struct Price: Money { let cents: Int }
print(Price(cents: 1299).label)

Pemeriksaan Singkat

Uji pemahaman Anda tentang bawaan ekstensi protokol.

Ringkasan

Ekstensi protokol menyediakan implementasi bawaan, sehingga tipe yang mematuhi protokol dapat mewarisi perilaku bersama dan menimpanya jika diperlukan. Anda dapat menambahkan metode tambahan dan properti terhitung, membatasi bawaan dengan where, serta telah melihat aturan pemanggilan statis versus dinamis: deklarasikan metode dalam protokol agar pemanggilan dinamis digunakan.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Implementasi Bawaan dalam Ekstensi” gratis?

Ya — teks lengkap “Implementasi Bawaan dalam Ekstensi” 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 “Implementasi Bawaan dalam Ekstensi”?

Sediakan perilaku bersama melalui ekstensi protocol. 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 4.

Berapa lama pelajaran “Implementasi Bawaan dalam Ekstensi” 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. Protocol sebagai Kontrak
  2. Implementasi Bawaan dalam Ekstensi
  3. Komposisi Protocol
  4. Kesesuaian Kondisional
← Kembali ke Swift Academy