0Pricing
Swift Academy · Ders

Uzantılarda Varsayılan Gerçekleştirimler

Protokol uzantılarıyla ortak davranış sağlayın.

Uzantılarda Varsayılan Gerçekleştirimler, CoddyKit'te ücretsiz bir Swift Academy dersidir. Bu, 4 dersinin 2. 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.

Sorun

Protokoller gereksinimleri bildirir ancak davranış sağlamaz. Her uyumlu tür aynı mantığı tekrarlamak zorunda kalsaydı kodu çoğaltmanız gerekirdi. Protokol genişletmeleri, varsayılan uygulamalar sağlayarak bu sorunu çözer.

protocol Greeter {
    func greet() -> String
}

Varsayılan Ekleme

Protokol üzerindeki bir genişletme bir gereksinimi uygulayabilir. Uyumlu türler, kendi uygulamalarını sağlamadıkları sürece bu davranışı ücretsiz olarak edinir.

protocol Greeter { func greet() -> String }

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

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

Varsayılanı Geçersiz Kılma

Uyumlu bir tür kendi uygulamasını sağlayabilir; bu uygulama genişletmedeki varsayılanın önceliğini alır.

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

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

Ek Yöntemler Ekleme

Genişletmeler, protokolde hiç bulunmayan yepyeni yöntemler ekleyebilir. Uyumlu her tür bunları otomatik olarak kazanır.

protocol Named { var name: String { get } }

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

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

Varsayılan Hesaplanan Özellikler

Genişletmeler, hesaplanan özellikleri de varsayılan olarak sağlayabilir.

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)

Gereksinimler Üzerine Kurma

Varsayılan bir uygulama, protokolün kendi gereksinimlerini çağırabilir ve her türün sağlaması gereken en küçük sözleşmeden daha zengin bir davranış oluşturabilir.

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)

Kısıtlı Genişletmeler

Bir varsayılanın yalnızca ek koşullar sağlandığında uygulanması için where cümlesini kullanın. Burada varsayılan yalnızca Self aynı zamanda Equatable olduğunda vardır.

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

Varsayılan ve Gereksinim Birlikte

Bir yöntemi protokolde bildirebilir ve AND varsayılan bir uygulama sağlayabilirsiniz. Yöntemi protokolde listelemek, protokol türü üzerinden dinamik yönlendirmeyi etkinleştirir.

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

Statik Yönlendirmede Dikkat Edilecek Nokta

Bir yöntem yalnızca genişletmede bulunuyorsa (protokolde bulunmuyorsa), somut tür kendi yöntemini tanımlamış olsa bile protokol türündeki bir değer üzerinden yapılan çağrılar genişletmedeki sürümü kullanır. Dinamik yönlendirme için yöntemi protokolde bildirin.

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

Tekrarlı Kodu Azaltma

Gereken küçük bir yüzey ile zengin varsayılanların birleşimi, protokol odaklı tasarımın temelidir: uyumlu türler en azını uygular, ortak davranış ise tek bir yerde bulunur.

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)

Birden Çok Genişletmeyi Birleştirme

Düzenleme amacıyla varsayılanları birkaç genişletmeye bölebilirsiniz; bunların tümü uyumlu türe katkı sağlar.

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)

Hızlı Kontrol

Protokol genişletmelerindeki varsayılanları kavrayışınızı sınayın.

Özet

Protokol genişletmelerinin varsayılan uygulamalar sağladığını, böylece uyumlu türlerin ortak davranışı devralıp gerektiğinde geçersiz kılabildiğini öğrendiniz. Ek yöntemler ve hesaplanan özellikler ekleyebilir, varsayılanları where ile kısıtlayabilirsiniz. Ayrıca statik ve dinamik yönlendirme kuralını gördünüz: dinamik yönlendirme için yöntemi protokolde bildirin.

Sıkça Sorulan Sorular

“Uzantılarda Varsayılan Gerçekleştirimler” dersi ücretsiz mi?

Evet — “Uzantılarda Varsayılan Gerçekleştirimler” 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.

“Uzantılarda Varsayılan Gerçekleştirimler” dersinde ne öğreneceğim?

Protokol uzantılarıyla ortak davranış sağlayın. 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 2. dersidir.

“Uzantılarda Varsayılan Gerçekleştirimler” 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