0Pricing
Swift Academy · Ders

Protokol Birleştirme

Birden çok protokol gereksinimini & ile birleştirin.

Protokol Birleştirme, CoddyKit'te ücretsiz bir Swift Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Swift Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Swift Academy kursu toplamda 4 dersten oluşur.

Protokolleri Birleştirme

Bazen bir değerin aynı anda birkaç protokolü karşılaması gerekir. Swift, protokolleri & işleciyle oluşturmanıza olanak tanır: SomeProtocol & AnotherProtocol.

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

Bileşim Türünde Parametre

Named & Aged türündeki bir parametre, her iki protokole de uyan herhangi bir değeri kabul eder.

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))

Neden Kalıtım Kullanılmasın?

Bileşim, yeni bir birleşik protokol oluşturmadan çağrı noktasında her iki protokolü de gerektirmenizi sağlar. Protokolleri küçük ve yeniden kullanılabilir tutar.

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())

Üç veya Daha Fazlası

Ek & işleçleriyle gerektiği kadar protokolü zincirleyebilirsiniz.

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())

Bir Sınıfı Protokolle Birleştirme

Bir sınıf türünü protokollerle birleştirebilirsiniz: SomeClass & SomeProtocol, değerin o sınıfın (veya bir alt sınıfın) örneği olmasını AND protokole uymasını gerektirir.

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())

Bileşim Döndürme

Bir işlev, bileşim türü döndürebilir ve çağırana sonucun listelenen tüm protokollere uyduğunu taahhüt edebilir.

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)

Bileşim için typealias

Bir bileşime typealias ile okunabilir bir ad vererek & zincirini tekrarlamadan yeniden kullanabilirsiniz.

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())

Koleksiyonlarda Bileşim

Bileşim türündeki değerleri dizilerde saklayabilir ve her öğede tüm protokollerin üyelerine erişebilirsiniz.

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) }

Standart Protokollerle Bileşim

Bileşim, kütüphane protokolleriyle özellikle kullanışlıdır. Örneğin hem CustomStringConvertible hem de Equatable gerektirebilirsiniz.

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

İşaretleyici Olarak Boş Protokoller

Birleştirme, tür sisteminde amacı ifade etmek için bir işaretleyici protokolü (gereksinimi olmayan) işlevsel bir protokolle bir araya getirebilir.

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())

Birleştirme ve Jenerikler

Birleştirme (A & B) somut türü siler; jenerikler (<T: A & B>) ise onu korur. Parametre ve dönüş türlerini ilişkilendirmeniz gerektiğinde jenerikleri kullanın.

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())

Hızlı Kontrol

Protokol birleştirme konusundaki anlayışınızı sınayın.

Özet

& ile protokol birleştirme, yeni bir birleşik protokol tanımlamadan aynı anda birden çok protokole (ve isteğe bağlı olarak bir sınıfa) uyumluluk gerektirmenizi sağlar. Birleştirmelere typealias ile ad verebilir, bunları parametrelerde, dönüş değerlerinde ve koleksiyonlarda kullanabilirsiniz. Ayrıca birleştirmenin somut türleri koruma bakımından jeneriklerden nasıl ayrıldığını gördünüz.

Sıkça Sorulan Sorular

“Protokol Birleştirme” dersi ücretsiz mi?

Evet — “Protokol Birleştirme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Swift Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Swift Academy kursu toplamda 4 dersten oluşur.

“Protokol Birleştirme” dersinde ne öğreneceğim?

Birden çok protokol gereksinimini & ile birleştirin. Swift Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Swift Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Swift Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“Protokol Birleştirme” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Swift Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Swift Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Sözleşme Olarak Protokoller
  2. Uzantılarda Varsayılan Gerçekleştirimler
  3. Protokol Birleştirme
  4. Koşullu Uyum
← Swift Academy Sayfasına Dön