0Pricing
Swift Academy · Lektion

Wrapper und projectedValue erstellen

Erstellen Sie einen eigenen Wrapper, konfigurieren Sie wrappedValue und stellen Sie Metadaten/Hilfsfunktionen mit projectedValue ( $ ) bereit.

Wrapper und projectedValue erstellen ist eine kostenlose Swift Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 3. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Swift Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Swift Academy-Kurs umfasst insgesamt 3 Lektionen.

Warum Property Wrapper?

Ein Property Wrapper ist ein wiederverwendbarer Typ, der verwaltet, wie eine Eigenschaft gespeichert und gelesen wird:

  • wrappedValue: der öffentliche Wert
  • projectedValue: zusätzliche API über $
  • Konfiguration über Initializer/Argumente

Clamped + projiziertes Flag

@Clamped begrenzt eine Zahl auf einen Wertebereich. Der projectedValue ($hp) zeigt an, ob die letzte Zuweisung begrenzt wurde.

@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)

Normalisieren und alternative Ansicht

Wrapper können Eingaben transformieren (trimmen/in Kleinbuchstaben umwandeln). $property kann eine praktische alternative Darstellung bereitstellen.

@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)

Konfigurierbarer Wrapper

Übergeben Sie Wrappern Argumente (z. B. length). Der Wrapper wendet die Formatierung bei jeder Zuweisung der Eigenschaft an.

@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

Verlauf über $value

Verwenden Sie projectedValue, um Metadaten wie einen Änderungsverlauf bereitzustellen, ohne die API des eigentlichen Werts zu überladen.

@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]

Gestaltungshinweise

Tipps:

  • Halten Sie Wrapper klein und zielgerichtet.
  • Dokumentieren Sie, was $projectedValue bereitstellt.
  • Bevorzugen Sie reine Transformationen und vermeiden Sie umfangreiche Nebenwirkungen.
  • Stellen Sie klare Initializer und sinnvolle Standardwerte bereit.

Zweck des projizierten Werts

Kurztest: Wofür wird $property in Wrappern verwendet?

Zusammenfassung

Zusammenfassung: Implementieren Sie @propertyWrapper mit einem wrappedValue; stellen Sie Hilfsfunktionen, Flags und Verlauf über projectedValue ($) bereit und konfigurieren Sie das Verhalten über Initializer.

Häufig gestellte Fragen

Ist die Lektion „Wrapper und projectedValue erstellen“ kostenlos?

Ja — der vollständige Text von „Wrapper und projectedValue erstellen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Swift Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Swift Academy-Kurs umfasst insgesamt 3 Lektionen.

Was lerne ich in „Wrapper und projectedValue erstellen“?

Erstellen Sie einen eigenen Wrapper, konfigurieren Sie wrappedValue und stellen Sie Metadaten/Hilfsfunktionen mit projectedValue ( $ ) bereit. Du übst Swift Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Swift Academy zu starten?

Keine Vorkenntnisse erforderlich. Swift Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 3.

Wie lange dauert die Lektion „Wrapper und projectedValue erstellen“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Swift Academy-Lektion Code schreiben und ausführen?

Ja. Jede Swift Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Wrapper und projectedValue erstellen
  2. Wiederverwendbarkeit und Einschränkungen
  3. Gängige Wrapper-Muster (Validierung, Caching)
← Zurück zu Swift Academy