0Pricing
Swift Academy · Pelajaran

Protocol sebagai Kontrak

Definisikan kontrak perilaku yang tidak bergantung pada tipe.

Protocol sebagai Kontrak 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.

Apa Itu Protokol

Sebuah protokol mendefinisikan cetak biru metode, properti, dan persyaratan lain yang harus diterapkan oleh tipe yang mematuhinya. Protokol adalah sebuah kontrak: tipe apa pun yang mengadopsinya berjanji menyediakan semua yang dideklarasikan protokol tersebut.

protocol Greetable {
    var name: String { get }
    func greet() -> String
}

Mematuhi Protokol

Sebuah tipe mematuhi protokol dengan mengadopsinya dan memenuhi setiap persyaratan. Di sini, sebuah struktur memenuhi properti name dan metode greet().

protocol Greetable {
    var name: String { get }
    func greet() -> String
}

struct Person: Greetable {
    let name: String
    func greet() -> String { "Hello, I am " + name }
}

let p = Person(name: "Ada")
print(p.greet())

Persyaratan Properti

Protokol menentukan apakah suatu properti harus dapat dibaca ({ get }) atau dapat dibaca dan diubah ({ get set }). Properti tersimpan atau terhitung dapat memenuhi persyaratan hanya-baca.

protocol Identifiable {
    var id: String { get }
}

struct User: Identifiable {
    let id: String
}

print(User(id: "u-1").id)

Persyaratan Metode

Persyaratan metode mencantumkan nama, parameter, dan tipe pengembalian, tetapi tidak memiliki isi. Tipe yang mematuhi protokol menyediakan implementasinya.

protocol Shape {
    func area() -> Double
}

struct Square: Shape {
    let side: Double
    func area() -> Double { side * side }
}

print(Square(side: 3).area())

Persyaratan mutating

Untuk tipe nilai, metode yang mengubah self harus ditandai dengan mutating. Deklarasikan persyaratan tersebut dengan mutating agar struktur dapat memenuhinya.

protocol Toggleable {
    mutating func toggle()
}

struct Switch: Toggleable {
    var isOn = false
    mutating func toggle() { isOn.toggle() }
}

var s = Switch()
s.toggle()
print(s.isOn)

Protokol sebagai Tipe

Protokol adalah tipe kelas pertama. Anda dapat menggunakannya untuk variabel, parameter, dan nilai pengembalian, serta menerima nilai apa pun yang mematuhi protokol tersebut.

protocol Animal { func sound() -> String }
struct Dog: Animal { func sound() -> String { "Woof" } }
struct Cat: Animal { func sound() -> String { "Meow" } }

let animals: [Animal] = [Dog(), Cat()]
for a in animals { print(a.sound()) }

Polimorfisme melalui Protokol

Memanggil metode protokol akan meneruskan pemanggilan ke tipe konkret di balik nilai tersebut. Dengan demikian, Anda dapat menulis kode yang bekerja pada banyak tipe melalui satu kontrak.

protocol Describable { func describe() -> String }
struct Book: Describable { let t: String; func describe() -> String { "Book: " + t } }
struct Film: Describable { let t: String; func describe() -> String { "Film: " + t } }

func show(_ d: Describable) { print(d.describe()) }
show(Book(t: "Swift"))
show(Film(t: "Inception"))

Persyaratan Penginisialisasi

Protokol dapat mewajibkan penginisialisasi. Classes harus menandai implementasinya dengan required agar subkelas juga menyediakannya.

protocol FromInt {
    init(value: Int)
}

struct Wrapper: FromInt {
    let value: Int
    init(value: Int) { self.value = value }
}

print(Wrapper(value: 42).value)

Pewarisan Protokol

Sebuah protokol dapat mewarisi satu atau beberapa protokol lain, serta menambahkan persyaratan tambahan di atas persyaratan yang diwarisinya.

protocol Named { var name: String { get } }
protocol Aged: Named { var age: Int { get } }

struct Member: Aged {
    let name: String
    let age: Int
}

let m = Member(name: "Lin", age: 30)
print(m.name, m.age)

Protokol Khusus Kelas

Tandai protokol dengan AnyObject untuk membatasi kepatuhan hanya pada classes, yang berguna untuk persyaratan dengan semantik referensi seperti delegasi.

protocol Counter: AnyObject {
    var count: Int { get set }
}

class Box: Counter {
    var count = 0
}

let b = Box()
b.count = 5
print(b.count)

Memeriksa Kepatuhan

Gunakan is dan as? untuk menguji saat runtime apakah suatu nilai mematuhi protokol.

protocol Flyer { func fly() }
struct Bird: Flyer { func fly() { print("flap") } }
struct Rock {}

let things: [Any] = [Bird(), Rock()]
for t in things {
    if let f = t as? Flyer { f.fly() } else { print("grounded") }
}

Pemeriksaan Singkat

Uji pemahaman Anda tentang persyaratan protokol.

Ringkasan

Anda telah mempelajari bahwa protokol adalah kontrak: protokol mendeklarasikan persyaratan properti, metode, mutating, dan penginisialisasi tanpa implementasi. Tipe mematuhi protokol dengan memenuhi setiap persyaratan, protokol dapat digunakan sebagai tipe untuk polimorfisme, dapat mewarisi protokol lain, dan dapat dibatasi hanya untuk classes dengan AnyObject.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Protocol sebagai Kontrak” gratis?

Ya — teks lengkap “Protocol sebagai Kontrak” 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 “Protocol sebagai Kontrak”?

Definisikan kontrak perilaku yang tidak bergantung pada tipe. 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 “Protocol sebagai Kontrak” 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