Swift Academy · पाठ

रैपर बनाना, projectedValue

एक कस्टम रैपर बनाइए, wrappedValue कॉन्फ़िगर कीजिए और projectedValue ( $ ) के माध्यम से मेटाडेटा/सहायक सुविधाएँ उपलब्ध कराइए।

पाठ 1, कुल 3 में से8 चरण

रैपर बनाना, projectedValue, CoddyKit पर Swift Academy का एक निःशुल्क पाठ है। यह 3 में से 1वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Swift Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Swift Academy पाठ्यक्रम में कुल 3 पाठ शामिल हैं।

प्रॉपर्टी रैपर क्यों?

प्रॉपर्टी रैपर एक पुनःउपयोग योग्य प्रकार है, जो यह प्रबंधित करता है कि किसी प्रॉपर्टी को कैसे संग्रहीत या पढ़ा जाए:

  • wrappedValue: सार्वजनिक मान
  • projectedValue: $ के माध्यम से अतिरिक्त एपीआई
  • इनिशियलाइज़र/आर्ग्युमेंट के माध्यम से कॉन्फ़िगरेशन

Clamped और प्रोजेक्टेड फ़्लैग

@Clamped किसी संख्या को एक श्रेणी तक सीमित करता है। projectedValue ($hp) बताता है कि अंतिम सेट करते समय मान सीमित किया गया था या नहीं।

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

सामान्यीकरण और वैकल्पिक दृश्य

रैपर इनपुट को रूपांतरित कर सकते हैं (ट्रिम/लोअरकेस)। $property एक उपयोगी वैकल्पिक रूप उपलब्ध करा सकता है।

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

कॉन्फ़िगर करने योग्य रैपर

रैपर को आर्ग्युमेंट दें (जैसे, लंबाई)। हर बार प्रॉपर्टी सेट करने पर रैपर फ़ॉर्मैटिंग लागू करता है।

@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

History के माध्यम से $value

मुख्य मान वाले एपीआई को अव्यवस्थित किए बिना परिवर्तन-इतिहास जैसे मेटाडेटा को उजागर करने के लिए projectedValue का उपयोग करें।

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

डिज़ाइन संबंधी मार्गदर्शन

सुझाव:

  • रैपर को छोटा और केंद्रित रखें।
  • दस्तावेज़ित करें कि $projectedValue क्या उजागर करता है।
  • शुद्ध रूपांतरणों को प्राथमिकता दें; भारी साइड इफ़ेक्ट से बचें।
  • स्पष्ट इनिशियलाइज़र और उचित डिफ़ॉल्ट उपलब्ध कराएँ।

प्रोजेक्टेड मान का उद्देश्य

त्वरित जाँच: रैपर में $property का उपयोग किस लिए किया जाता है?

पुनरावलोकन

पुनरावलोकन: @propertyWrapper को wrappedValue के साथ लागू करें; projectedValue ($) के माध्यम से सहायक, फ़्लैग और इतिहास उजागर करें, और इनिशियलाइज़र के माध्यम से व्यवहार कॉन्फ़िगर करें।

शुरुआत निःशुल्क

एआई शिक्षक के साथ Swift सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
122
पाठ
409

अक्सर पूछे जाने वाले प्रश्न

क्या “रैपर बनाना, projectedValue” पाठ निःशुल्क है?

हाँ — Swift Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “रैपर बनाना, projectedValue” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Swift Academy पाठ्यक्रम में कुल 3 पाठ शामिल हैं।

“रैपर बनाना, projectedValue” में मैं क्या सीखूँगा?

एक कस्टम रैपर बनाइए, wrappedValue कॉन्फ़िगर कीजिए और projectedValue ( $ ) के माध्यम से मेटाडेटा/सहायक सुविधाएँ उपलब्ध कराइए। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Swift Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Swift Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Swift Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 3 में से 1वाँ पाठ है।

“रैपर बनाना, projectedValue” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Swift Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Swift Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. रैपर बनाना, projectedValue
  2. पुनः उपयोग और प्रतिबंध
  3. सामान्य रैपर पैटर्न (सत्यापन, कैशिंग)
← Swift Academy पर वापस जाएँ