Swift Academy · Pelajaran

Sambungan protokol berbanding sambungan jenis

Bezakan sambungan protokol (menambahkan pelaksanaan lalai kepada protokol, termasuk secara bersyarat) dengan sambungan jenis (menambahkan API kepada satu jenis konkrit). Fahami tingkah laku penghantaran dan kekangan.

Pelajaran 2 daripada 38 langkah

Sambungan protokol berbanding sambungan jenis ialah pelajaran Swift Academy percuma di CoddyKit. Ini ialah pelajaran 2 daripada 3. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Swift Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Swift Academy merangkumi sejumlah 3 pelajaran.

Gambaran keseluruhan

Matlamat: Ketahui masa untuk menggunakan sambungan protokol (tingkah laku lalai untuk semua jenis yang mematuhi protokol) berbanding sambungan jenis (API untuk satu jenis konkrit). Kami juga akan menyentuh peraturan penghantaran.

Protokol dan pematuhan

Protokol mengisytiharkan keperluan. Jenis mematuhi protokol dengan melaksanakan keperluan 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())

Pelaksanaan lalai melalui sambungan protokol

Sambungan protokol boleh menyediakan pelaksanaan lalai yang digunakan oleh semua jenis yang mematuhi protokol, melainkan jenis tersebut menyediakan pelaksanaannya 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 sambungan jenis

Sambungan jenis menambahkan kaedah atau sifat terhitung kepada satu jenis konkrit. Sambungan ini tidak menambahkan sifat 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))

Sambungan bersyarat

Tambahkan tingkah laku kepada sesetengah jenis yang mematuhi protokol dengan menggunakan klausa where pada sambungan 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

Tingkah laku penghantaran (gambaran keseluruhan)

Peraturan umum: Jika kaedah ialah keperluan protokol dan jenis yang mematuhi protokol melaksanakannya, pelaksanaan jenis tersebut diutamakan (seperti penghantaran dinamik). Kaedah yang hanya ditambahkan dalam sambungan protokol (bukan keperluan) dihantar secara statik.

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

Sambungan protokol berbanding jenis

Semakan pantas: Apakah perbezaan utamanya?

Ulang kaji

Ulang kaji: Gunakan sambungan protokol untuk lalai yang boleh diguna semula (secara pilihan, bersyarat). Gunakan sambungan jenis untuk mengembangkan satu jenis. Ingat peraturan penghantaran: pelaksanaan keperluan mengatasi kaedah lalai sambungan.

Percuma untuk bermula

Pelajari Swift dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
122
Pelajaran
409

Soalan Lazim

Adakah pelajaran “Sambungan protokol berbanding sambungan jenis” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Swift Academy, termasuk “Sambungan protokol berbanding sambungan jenis”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Swift Academy merangkumi sejumlah 3 pelajaran.

Apakah yang akan saya pelajari dalam “Sambungan protokol berbanding sambungan jenis”?

Bezakan sambungan protokol (menambahkan pelaksanaan lalai kepada protokol, termasuk secara bersyarat) dengan sambungan jenis (menambahkan API kepada satu jenis konkrit). Fahami tingkah laku penghanta… Anda berlatih Swift Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Swift Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Swift Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 3.

Berapa lamakah pelajaran “Sambungan protokol berbanding sambungan jenis” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Swift Academy ini?

Ya. Setiap pelajaran Swift Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Asas Protokol dan Sambungan
  2. Sambungan protokol berbanding sambungan jenis
  3. Keperluan statik berbanding tika
← Kembali ke Swift Academy