0Pricing
Swift Academy · Ders

Genel Alt Betikler ve Uzantılar

Alt betiklere ve uzantılara kısıtlar uygulayın.

Genel Alt Betikler ve Uzantılar, CoddyKit'te ücretsiz bir Swift Academy dersidir. Bu, 4 dersinin 4. 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.

Jenerik Alt Betikler

Alt betikler jenerik olabilir ve kapsayan türden bağımsız kendi tür parametrelerini alabilir. Böylece tek bir alt betik birçok giriş türüne hizmet edebilir.

struct Lookup {
    let data = [1, 2, 3, 4, 5]
    subscript<S: Sequence>(indices idx: S) -> [Int] where S.Element == Int {
        idx.map { data[$0] }
    }
}
print(Lookup()[indices: [0, 2, 4]])

Jenerik Alt Betikler Neden Kullanılır?

Herhangi bir Sequence türünden Int dizisini kabul ettiği için aynı alt betiğe bir Array, bir Set veya bir Range dizini aktarabilirsiniz.

struct Lookup {
    let data = [10, 20, 30, 40]
    subscript<S: Sequence>(_ idx: S) -> [Int] where S.Element == Int {
        idx.map { data[$0] }
    }
}
let l = Lookup()
print(l[0...1])
print(l[[3, 0]])

Kısıtlanmış Genişletmeler

extension ... where, yalnızca kısıtlama sağlandığında var olan üyeler ekler. Bu üyeler tür üzerinde yalnızca eşleşen jenerik bağımsız değişkenler için görünür.

extension Array where Element: Numeric {
    func sumAll() -> Element { reduce(0, +) }
}
print([1, 2, 3].sumAll())
print([1.5, 2.5].sumAll())

Belirli Bir Öğe Türü Üzerinde Genişletme

Yalnızca dizi dizilerine String'e özgü yardımcılar eklemek için where Element == String kullanın.

extension Array where Element == String {
    func shout() -> [String] { map { $0.uppercased() + "!" } }
}
print(["hi", "bye"].shout())

Protokollü Kısıtlanmış Genişletme

Öğeler özel bir protokole uyduğunda davranış ekleyin.

protocol Priced { var price: Double { get } }
struct Item: Priced { let price: Double }
extension Collection where Element: Priced {
    var total: Double { reduce(0) { $0 + $1.price } }
}
print([Item(price: 2), Item(price: 3)].total)

İsteğe Bağlı Değer Döndüren Jenerik Alt Betik

Bir alt betik jenerik olabilir ve örneğin bir koleksiyende güvenli dizinleme yapmak için isteğe bağlı bir değer döndürebilir.

extension Array {
    subscript(safe i: Int) -> Element? {
        indices.contains(i) ? self[i] : nil
    }
}
print([1, 2, 3][safe: 1] ?? -1)
print([1, 2, 3][safe: 9] ?? -1)

Sözlükte Jenerik Alt Betik

Jenerik alt betikler bir anahtar dizisini kabul edip eşleşen değerleri döndürebilir.

extension Dictionary {
    subscript<S: Sequence>(keys ks: S) -> [Value] where S.Element == Key {
        ks.compactMap { self[$0] }
    }
}
let d = ["a": 1, "b": 2, "c": 3]
print(d[keys: ["a", "c"]].sorted())

Self Üzerinde where ile Birleştirme

Jenerik türler üzerindeki genişletmeler, sarılan türü kısıtlayarak amaca uygun API'ler sunabilir.

struct Stack<T> { var items: [T] = [] }
extension Stack where T: Comparable {
    var peakMax: T? { items.max() }
}
var s = Stack<Int>(); s.items = [3, 9, 1]
print(s.peakMax!)

Birden Çok Parametreli Jenerik Alt Betik

Bir alt betik aynı anda birden çok bağımsız değişken ve kendi tür parametrelerini alabilir.

struct Grid {
    let rows = [[1, 2], [3, 4]]
    subscript(_ r: Int, _ c: Int) -> Int { rows[r][c] }
}
print(Grid()[1, 0])

Salt Okunur ve Okunur-Yazılır

Özellikler gibi alt betiklerde de yalnızca bir get veya değişikliğe izin veren hem get hem de set bulunabilir.

struct Pad {
    var values = [0, 0, 0]
    subscript(i: Int) -> Int {
        get { values[i] }
        set { values[i] = newValue }
    }
}
var p = Pad(); p[1] = 7
print(p.values)

Hepsini Bir Araya Getirme

Jenerik alt betikler ile kısıtlanmış genişletmeler, kullanılan öğe veya bağımsız değişken türlerine uyum sağlayan, ifade gücü yüksek ve tür güvenli API'ler oluşturmanızı sağlar.

extension Array where Element: Comparable {
    subscript(topAfterSort i: Int) -> Element { sorted()[i] }
}
print([5, 1, 9, 3][topAfterSort: 0])

Hızlı Kontrol

Jenerik alt betikler ve kısıtlanmış genişletmeler konusundaki anlayışınızı sınayın.

Özet

Jenerik alt betikler kendi tür parametrelerini ve where koşullarını bildirerek tek bir alt betiğin birçok giriş türünü kabul etmesini sağlar. Kısıtlanmış genişletmeler (where Element: ... veya == ...), yalnızca koşullar sağlandığında üyeler ekler. Birlikte, tür güvenli ve uyarlanabilir API'ler oluştururlar.

Sıkça Sorulan Sorular

“Genel Alt Betikler ve Uzantılar” dersi ücretsiz mi?

Evet — “Genel Alt Betikler ve Uzantılar” 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.

“Genel Alt Betikler ve Uzantılar” dersinde ne öğreneceğim?

Alt betiklere ve uzantılara kısıtlar uygulayı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 4. dersidir.

“Genel Alt Betikler ve Uzantılar” 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