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
- Sarmalayıcılar ve projectedValue oluşturma
- Yeniden kullanılabilirlik ve kısıtlamalar
- Yaygın sarmalayıcı kalıpları (doğrulama, önbellekleme)