0Pricing
Swift Academy · Ders

Yeniden kullanılabilirlik ve kısıtlamalar

Tür kısıtlamalarıyla (ör. Value: Comparable ) generic sarmalayıcılar tasarlayın, where aracılığıyla hedeflenmiş API'ler ekleyin ve birden çok sarmalayıcıyı birleştirin.

Yeniden kullanılabilirlik ve kısıtlamalar, CoddyKit'te ücretsiz bir Swift Academy dersidir. Bu, 3 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 3 dersten oluşur.

Kısıtlamalar neden gerekli?

Bir sarmalayıcıyı kısıtlamalar kullanarak jenerik hâle getirip birçok türde yeniden kullanın. where yan tümceleriyle hedefe yönelik API'ler ekleyin ve küçük sarmalayıcıları birleştirin.

Jenerik + Comparable

Tek bir Bounded sarmalayıcısının Int, String vb. türlerle çalışmasını sağlamak için Comparable kullanın. Geçersiz türler derleme zamanında reddedilir.

@propertyWrapper
struct Bounded<Value: Comparable> {
    private var value: Value
    private let range: ClosedRange<Value>

    var wrappedValue: Value {
        get { value }
        set {
            // clamp using Comparable
            if newValue < range.lowerBound { value = range.lowerBound }
            else if newValue > range.upperBound { value = range.upperBound }
            else { value = newValue }
        }
    }

    init(wrappedValue: Value, _ range: ClosedRange<Value>) {
        self.range = range
        self.value = min(max(wrappedValue, range.lowerBound), range.upperBound)
    }
}

struct Stats {
    @Bounded(0...100) var score: Int = 120
    @Bounded("a"..."z") var letter: String = "Swift"
}
var st = Stats()
print(st.score)   // 100
st.letter = "m"
print(st.letter)

Kısıtlı genişletmeler

where kullanarak, yalnızca tür bunu desteklediğinde ek özellikler sunun (ör. tamsayı bayrakları veya kayan nokta güncellemeleri).

extension Bounded where Value: BinaryInteger {
    var isMaxed: Bool { wrappedValue == range.upperBound }
}
extension Bounded where Value: FloatingPoint {
    mutating func bump(by delta: Value) { wrappedValue = wrappedValue + delta }
}

struct Meter {
    @Bounded(0...10) var steps: Int = 9
    @Bounded(0.0...1.0) var progress: Double = 0.25
}
var m = Meter()
print(m.$steps)          // projectedValue not defined; accessing wrapper is not allowed directly here
print(m._steps)          // compiler creates backing storage name; shown for illustration only
print(m.steps)           // 9
print(m._progress)       // backing storage (illustrative)
m._progress.bump(by: 0.6)
print(m.progress)        // 0.85 (clamped if exceeded)

Yalnızca koleksiyonlar için sarmalayıcı

Koleksiyonları RangeReplaceableCollection ile sınırlandırarak API'leri yalnızca koleksiyonlarla kısıtlayın. String ve Array için çalışır.

@propertyWrapper
struct MaxLength<Value: RangeReplaceableCollection> where Value.Element: Sendable {
    private var storage: Value
    private let limit: Int

    var wrappedValue: Value {
        get { storage }
        set {
            var v = newValue
            if v.count > limit { v.removeLast(v.count - limit) }
            storage = v
        }
    }

    init(wrappedValue: Value, _ limit: Int) {
        self.limit = limit
        self.storage = wrappedValue
        if storage.count > limit { storage.removeLast(storage.count - limit) }
    }
}

struct Post {
    @MaxLength(10) var title: String = "hello swift learners"
    @MaxLength(5) var tags: [String] = ["swift","ios","spm"]
}
var p = Post()
print(p.title)  // "hello swif"
print(p.tags)   // ["swift","ios","spm"]

Sarmalayıcı bileşimi

Küçük sarmalayıcıları üst üste koyabilirsiniz. Burada önce Trimmed çalışır, ardından NonEmpty bir geri dönüş değeri sağlar.

@propertyWrapper
struct Trimmed {
    private var s: String = ""
    var wrappedValue: String {
        get { s }
        set { s = newValue.trimmingCharacters(in: .whitespacesAndNewlines) }
    }
    init(wrappedValue: String) { self.wrappedValue = wrappedValue }
}

@propertyWrapper
struct NonEmpty {
    private var s: String = ""
    var wrappedValue: String {
        get { s }
        set { s = newValue.isEmpty ? "N/A" : newValue }
    }
    init(wrappedValue: String) { self.wrappedValue = wrappedValue }
}

struct Profile {
    @NonEmpty @Trimmed var displayName: String = "  "
}
var prof = Profile()
print(prof.displayName)  // "N/A"

Yerel değişkenler + yeniden kullanım

Sarmalayıcılar yerel değişkenler için de çalışır. Modüller arasında yeniden kullanabilmek için onları jenerik tutun.

@propertyWrapper
struct Default<Value> {
    private var value: Value
    private let make: () -> Value
    var wrappedValue: Value {
        get { value }
        set { value = newValue }
    }
    init(wrappedValue: Value, _ factory: @escaping () -> Value) {
        self.value = wrappedValue
        self.make = factory
    }
    mutating func reset() { value = make() }
}

// Local variable usage
do {
    @Default({ 0 }) var counter: Int = 5
    print(counter) // 5
    _counter.reset()
    print(counter) // 0
}

Sarmalayıcıda derleme zamanı kısıtlaması

Hızlı kontrol: Bir sarmalayıcıyı Comparable türlerle nasıl sınırlandırırsınız?

Özet

Özet: Sarmalayıcıları jenerik hâle getirin, kullanımı güvenli tutmak için kısıtlamalar ekleyin, where yan tümceleriyle hedefe yönelik API'ler sunun ve açıklığı artırmak için küçük sarmalayıcıları birleştirin.

Sıkça Sorulan Sorular

“Yeniden kullanılabilirlik ve kısıtlamalar” dersi ücretsiz mi?

Evet — “Yeniden kullanılabilirlik ve kısıtlamalar” 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 3 dersten oluşur.

“Yeniden kullanılabilirlik ve kısıtlamalar” dersinde ne öğreneceğim?

Tür kısıtlamalarıyla (ör. Value: Comparable ) generic sarmalayıcılar tasarlayın, where aracılığıyla hedeflenmiş API'ler ekleyin ve birden çok sarmalayıcıyı 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, 3 dersinin 2. dersidir.

“Yeniden kullanılabilirlik ve kısıtlamalar” 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. Sarmalayıcılar ve projectedValue oluşturma
  2. Yeniden kullanılabilirlik ve kısıtlamalar
  3. Yaygın sarmalayıcı kalıpları (doğrulama, önbellekleme)
← Swift Academy Sayfasına Dön