0Pricing
Swift Academy · Pelajaran

Komposisi Protocol

Gabungkan beberapa persyaratan protocol dengan &.

Komposisi Protocol adalah pelajaran Swift Academy gratis di CoddyKit. Ini adalah pelajaran 3 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.

Menggabungkan Protokol

Terkadang sebuah nilai harus mematuhi beberapa protokol sekaligus. Swift memungkinkan Anda menyusun protokol dengan operator &: SomeProtocol & AnotherProtocol.

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

Parameter Gabungan

Parameter bertipe Named & Aged menerima nilai apa pun yang mematuhi kedua protokol tersebut.

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

struct Person: Named, Aged {
    let name: String
    let age: Int
}

func intro(_ x: Named & Aged) {
    print(x.name + " is " + String(x.age))
}
intro(Person(name: "Sam", age: 28))

Mengapa Bukan Pewarisan

Komposisi memungkinkan Anda mewajibkan kedua protokol di lokasi pemanggilan tanpa membuat protokol gabungan baru. Hal ini menjaga protokol tetap kecil dan dapat digunakan kembali.

protocol Drawable { func draw() -> String }
protocol Resizable { func resize(_ f: Double) -> String }

struct Icon: Drawable, Resizable {
    func draw() -> String { "drawing" }
    func resize(_ f: Double) -> String { "x" + String(f) }
}

func render(_ v: Drawable & Resizable) {
    print(v.draw(), v.resize(2))
}
render(Icon())

Tiga atau Lebih

Anda dapat merangkai sebanyak mungkin protokol yang diperlukan dengan operator & tambahan.

protocol A { func a() -> String }
protocol B { func b() -> String }
protocol C { func c() -> String }

struct X: A, B, C {
    func a() -> String { "a" }
    func b() -> String { "b" }
    func c() -> String { "c" }
}

func use(_ v: A & B & C) { print(v.a(), v.b(), v.c()) }
use(X())

Komposisi dengan Kelas

Anda dapat menggabungkan tipe kelas dengan protokol: SomeClass & SomeProtocol mengharuskan nilai tersebut merupakan kelas itu atau subkelasnya AND mematuhi protokol.

class Vehicle { var speed = 0 }
protocol Electric { var battery: Int { get } }

class Tesla: Vehicle, Electric { var battery = 100 }

func check(_ v: Vehicle & Electric) {
    print(v.speed, v.battery)
}
check(Tesla())

Mengembalikan Komposisi

Sebuah fungsi dapat mengembalikan tipe gabungan, dengan menjanjikan kepada pemanggil bahwa hasilnya mematuhi semua protokol yang tercantum.

protocol Named { var name: String { get } }
protocol Aged { var age: Int { get } }
struct Person: Named, Aged { let name: String; let age: Int }

func makePerson() -> Named & Aged {
    Person(name: "Eve", age: 22)
}
let p = makePerson()
print(p.name, p.age)

typealias untuk Komposisi

Beri nama yang mudah dibaca pada komposisi dengan typealias agar Anda dapat menggunakannya kembali tanpa mengulangi rangkaian operator &.

protocol Codable2 { func encode() -> String }
protocol Loggable { func log() -> String }

typealias Persistable = Codable2 & Loggable

struct Record: Persistable {
    func encode() -> String { "data" }
    func log() -> String { "logged" }
}
func save(_ r: Persistable) { print(r.encode(), r.log()) }
save(Record())

Komposisi dalam Koleksi

Anda dapat menyimpan values bertipe gabungan dalam array dan mengakses anggota semua protokol pada setiap elemen.

protocol Named { var name: String { get } }
protocol Aged { var age: Int { get } }
struct P: Named, Aged { let name: String; let age: Int }

let group: [Named & Aged] = [P(name: "A", age: 1), P(name: "B", age: 2)]
for g in group { print(g.name, g.age) }

Komposisi dengan Protokol Standar

Komposisi sangat berguna dengan protokol pustaka. Misalnya, wajibkan CustomStringConvertible dan Equatable.

func report<T>(_ items: [T]) where T: CustomStringConvertible & Equatable {
    for i in items { print(i.description) }
}
report([1, 2, 3])

Protokol Kosong sebagai Penanda

Komposisi dapat menggabungkan protokol penanda (tanpa persyaratan) dengan protokol fungsional untuk menyatakan maksud dalam sistem tipe.

protocol Secure {}
protocol Sendable2 { func send() -> String }

struct Packet: Secure, Sendable2 {
    func send() -> String { "sent securely" }
}
func transmit(_ p: Secure & Sendable2) { print(p.send()) }
transmit(Packet())

Komposisi Dibandingkan dengan Tipe Generik

Komposisi (A & B) menghapus tipe konkret, sedangkan tipe generik (<T: A & B>) mempertahankannya. Gunakan tipe generik jika Anda perlu menghubungkan tipe parameter dan tipe hasil.

protocol A { func a() -> String }
protocol B { func b() -> String }
struct S: A, B { func a() -> String { "a" }; func b() -> String { "b" } }

func generic<T: A & B>(_ x: T) -> T { print(x.a(), x.b()); return x }
_ = generic(S())

Pemeriksaan Singkat

Uji pemahaman Anda tentang komposisi protokol.

Rangkuman

Komposisi protokol dengan & memungkinkan Anda mewajibkan kesesuaian dengan beberapa protokol (dan secara opsional satu kelas) sekaligus, tanpa mendefinisikan protokol gabungan baru. Anda dapat memberi nama pada komposisi menggunakan typealias, menggunakannya pada parameter, nilai hasil, dan koleksi, serta telah melihat perbedaan komposisi dan tipe generik dalam mempertahankan tipe konkret.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Komposisi Protocol” gratis?

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

Gabungkan beberapa persyaratan protocol dengan &. 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 3 dari 4.

Berapa lama pelajaran “Komposisi Protocol” 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