0Pricing
Swift Academy · Ders

Sarmalayıcılar ve projectedValue oluşturma

Özel bir sarmalayıcı oluşturun, wrappedValue değerini yapılandırın ve projectedValue ( $ ) ile üstveri/yardımcılar sunun.

Sarmalayıcılar ve projectedValue oluşturma, CoddyKit'te ücretsiz bir Swift Academy dersidir. Bu, 3 dersinin 1. 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.

Özellik sarmalayıcıları neden kullanılır?

Özellik sarmalayıcısı, bir özelliğin nasıl saklanıp okunacağını yöneten yeniden kullanılabilir bir türdür:

  • wrappedValue: genel değer
  • projectedValue: $ aracılığıyla ek arayüz
  • Başlatıcılar/argümanlar aracılığıyla yapılandırma

Clamped ve yansıtılan işaret

@Clamped bir sayıyı bir aralıkla sınırlar. projectedValue ($hp), son atamada sınırlandırma yapılıp yapılmadığını bildirir.

@propertyWrapper
struct Clamped {
    private var value: Int
    private let range: ClosedRange<Int>
    private(set) var wasClampedLastSet = false

    var wrappedValue: Int {
        get { value }
        set {
            let clamped = min(max(newValue, range.lowerBound), range.upperBound)
            wasClampedLastSet = (clamped != newValue)
            value = clamped
        }
    }

    var projectedValue: Bool { wasClampedLastSet } // $prop -> was it clamped?

    init(wrappedValue: Int, range: ClosedRange<Int>) {
        self.range = range
        let clamped = min(max(wrappedValue, range.lowerBound), range.upperBound)
        self.value = clamped
        self.wasClampedLastSet = (clamped != wrappedValue)
    }
}

struct Player {
    @Clamped(range: 0...100) var hp: Int = 120  // init clamps to 100
}

var p = Player()
print(p.hp)     // 100
p.hp = -5
print(p.hp, p.$hp)  // 0 true (was clamped)

Normalleştirme ve alternatif görünüm

Sarmalayıcılar girdiyi dönüştürebilir (kırpma/küçük harfe dönüştürme). $property kullanışlı bir alternatif biçim sunabilir.

@propertyWrapper
struct Normalized {
    private var storage: String = ""
    var wrappedValue: String {
        get { storage }
        set { storage = newValue.trimmingCharacters(in: .whitespacesAndNewlines).lowercased() }
    }
    var projectedValue: String { storage.uppercased() } // alternate view

    init(wrappedValue: String) { self.wrappedValue = wrappedValue }
}

struct User {
    @Normalized var username: String = "  Alice  "
}
let u = User()
print(u.username)   // "alice"
print(u.$username)  // "ALICE" (projected)

Yapılandırılabilir sarmalayıcı

Sarmalayıcılara argümanlar (örneğin uzunluk) iletin. Sarmalayıcı, özelliği her ayarladığınızda biçimlendirmeyi uygular.

@propertyWrapper
struct Padded {
    private var value: String
    private let length: Int
    var wrappedValue: String {
        get { value }
        set {
            let s = newValue
            value = s.count >= length ? String(s.prefix(length))
                                      : s + String(repeating: " ", count: length - s.count)
        }
    }
    var projectedValue: Int { value.count } // current width
    init(wrappedValue: String, length: Int) {
        self.length = length
        self.value = ""
        self.wrappedValue = wrappedValue
    }
}

struct Row {
    @Padded(length: 6) var code: String = "AB"
}
var r = Row()
print("|\(r.code)|")   // |AB    |
print(r.$code)        // 6

$value aracılığıyla geçmiş

Ana değer arayüzünü karmaşıklaştırmadan değişiklik geçmişi gibi üstverileri sunmak için projectedValue kullanın.

@propertyWrapper
struct History<Value> {
    private var value: Value
    private(set) var changes: [Value] = []
    var wrappedValue: Value {
        get { value }
        set { changes.append(value); value = newValue }
    }
    var projectedValue: [Value] { changes } // $prop -> previous values
    init(wrappedValue: Value) { self.value = wrappedValue }
}

struct Settings {
    @History var level: Int = 1
}
var s = Settings()
s.level = 2
s.level = 3
print(s.level)    // 3
print(s.$level)   // [1, 2]

Tasarım yönergeleri

İpuçları:

  • Sarmalayıcıları küçük ve odaklı tutun.
  • $projectedValue öğesinin ne sunduğunu belgeleyin.
  • Saf dönüşümleri tercih edin; ağır yan etkilerden kaçının.
  • Açık başlatıcılar ve makul varsayılanlar sağlayın.

Yansıtılan değerin amacı

Hızlı kontrol: Sarmalayıcılarda $property ne için kullanılır?

Özet

Özet: wrappedValue içeren bir @propertyWrapper uygulayın; yardımcıları, işaretleri ve geçmişi projectedValue ($) aracılığıyla sunun ve davranışı başlatıcılarla yapılandırın.

Sıkça Sorulan Sorular

“Sarmalayıcılar ve projectedValue oluşturma” dersi ücretsiz mi?

Evet — “Sarmalayıcılar ve projectedValue oluşturma” 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.

“Sarmalayıcılar ve projectedValue oluşturma” dersinde ne öğreneceğim?

Özel bir sarmalayıcı oluşturun, wrappedValue değerini yapılandırın ve projectedValue ( $ ) ile üstveri/yardımcılar sunun. 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 1. dersidir.

“Sarmalayıcılar ve projectedValue oluşturma” 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