0Pricing
Swift Academy · Ders

İlişkili Türleri Kısıtlama

Genel bağlamlarda ilişkili türleri sınırlandırın.

İlişkili Türleri Kısıtlama, 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.

İlişkili Türlerin Özeti

Bir protokol, uyumlu bir türün doldurduğu yer tutucu olan bir ilişkili türü associatedtype ile bildirebilir. Bir kapsayıcı protokolündeki Element klasik örnektir.

protocol Container {
    associatedtype Item
    var count: Int { get }
    func item(at i: Int) -> Item
}

Somut Bir Türle Uyumluluk

Uyumlu bir tür, ilişkili türü belirler; bu tür çoğu zaman nasıl kullanıldığına bakılarak çıkarılır.

protocol Container {
    associatedtype Item
    func item(at i: Int) -> Item
}
struct IntBox: Container {
    let values: [Int]
    func item(at i: Int) -> Int { values[i] }
}
print(IntBox(values: [10, 20]).item(at: 1))

İlişkili Türü Kısıtlama

Bildirimin içine doğrudan bir kısıtlama ekleyin: associatedtype Item: Comparable, her uyumlu türün öğe türünün karşılaştırmayı desteklemesini zorunlu kılar.

protocol Sorted {
    associatedtype Item: Comparable
    var items: [Item] { get }
}
struct Nums: Sorted { let items: [Int] }
print(Nums(items: [3, 1, 2]).items.sorted())

Kısıtlamayı Kullanma

İlişkili tür kısıtlandığı için protokol genişletmeleri bu yeteneğe güvenebilir.

protocol Sorted {
    associatedtype Item: Comparable
    var items: [Item] { get }
}
extension Sorted {
    var smallest: Item? { items.min() }
}
struct Nums: Sorted { let items: [Int] }
print(Nums(items: [5, 2, 8]).smallest!)

associatedtype Üzerinde where

Swift, bir ilişkili türü başka bir ilişkili türle veya iç içe bir türle ilişkilendirmek için ilişkili tür üzerinde where koşuluna da izin verir.

protocol Sequence2 {
    associatedtype Element
    associatedtype Iterator: IteratorProtocol where Iterator.Element == Element
}

Başka Bir Protokolle Kısıtlama

Bir ilişkili türün, sizin tanımladığınız bir protokole uyması gerekebilir; böylece davranış katmanları oluşturabilirsiniz.

protocol HasName { var name: String { get } }
protocol Registry {
    associatedtype Entry: HasName
    var entries: [Entry] { get }
}
struct User: HasName { let name: String }
struct Users: Registry { let entries: [User] }
print(Users(entries: [User(name: "Ada")]).entries[0].name)

Birden Çok İlişkili Tür

Bir protokol, her biri bağımsız olarak kısıtlanabilen birden çok ilişkili tür bildirebilir.

protocol Mapping {
    associatedtype Key: Hashable
    associatedtype Value
    func value(for k: Key) -> Value?
}
struct Phonebook: Mapping {
    let data: [String: Int]
    func value(for k: String) -> Int? { data[k] }
}
print(Phonebook(data: ["x": 1]).value(for: "x")!)

Varsayılan İlişkili Tür

Bir ilişkili türe = ile varsayılan değer verebilirsiniz; bu değer, uyumlu tür tarafından ayrıca belirtilmediğinde kullanılır.

protocol Producer {
    associatedtype Output = String
    func make() -> Output
}
struct Hello: Producer {
    func make() -> String { "hi" }
}
print(Hello().make())

Kısıtlamalar Jenerik Algoritmaları Etkinleştirir

Kısıtlanmış bir ilişkili türle protokol genişletmesi, tüm uyumlu türlerin paylaşabileceği gerçek algoritmaları uygulayabilir.

protocol Scored {
    associatedtype Score: Comparable
    var scores: [Score] { get }
}
extension Scored {
    var best: Score? { scores.max() }
}
struct Game: Scored { let scores: [Int] }
print(Game(scores: [10, 40, 25]).best!)

Genişletmelerde Aynı Tür Kısıtlamaları

Protokolün dışında, protokolü genişletirken ilişkili türü daha da kısıtlayabilirsiniz.

protocol Box2 {
    associatedtype Content
    var content: Content { get }
}
extension Box2 where Content == Int {
    var doubled: Int { content * 2 }
}
struct IB: Box2 { let content: Int }
print(IB(content: 7).doubled)

Neden Kısıtlanır?

İlişkili türleri kısıtlamak, protokollerin hem jenerik hem de güçlü kalmasını sağlar: kısıtlama, genişletmenin ve çağıranların güvenebileceği bir taahhüttür.

protocol Listy {
    associatedtype E: Equatable
    var elements: [E] { get }
}
extension Listy {
    func has(_ x: E) -> Bool { elements.contains(x) }
}
struct L: Listy { let elements: [String] }
print(L(elements: ["a", "b"]).has("b"))

Hızlı Kontrol

İlişkili türleri kısıtlama konusundaki anlayışınızı sınayın.

Özet

İlişkili türleri doğrudan kısıtlayabilir (associatedtype Item: Comparable), bunları where koşullarıyla ilişkilendirebilir, protokol uyumluluğu gerektirebilir, = ile varsayılanlar verebilir, birden çok ilişkili tür bildirebilir ve bunları genişletmelerde daha da belirginleştirebilirsiniz. Kısıtlamalar, protokol genişletmelerinin paylaşılan ve tür güvenli algoritmaları uygulamasını sağlar.

Sıkça Sorulan Sorular

“İlişkili Türleri Kısıtlama” dersi ücretsiz mi?

Evet — “İlişkili Türleri Kısıtlama” 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.

“İlişkili Türleri Kısıtlama” dersinde ne öğreneceğim?

Genel bağlamlarda ilişkili türleri sınırlandırı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 3. dersidir.

“İlişkili Türleri Kısıtlama” 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. Tür Parametresi Kısıtları
  2. İşlevlerde where Cümleleri
  3. İlişkili Türleri Kısıtlama
  4. Genel Alt Betikler ve Uzantılar
← Swift Academy Sayfasına Dön