दायरे के प्रलेखन पर कई रिश्तों के लिए इसकी घोषणा करता है List<Dog>
का उपयोग कर संपत्ति let
:
class Person: Object {
// ... other property declarations
let dogs = List<Dog>()
}
ऐसा क्यों है List<T>
का उपयोग कर घोषित संपत्ति let
जब अन्य दायरे संपत्ति प्रकार का उपयोग कर घोषित किया जाता है dynamic var
?
उत्तर:
उत्तर № 1 के लिए 7List<T>
गुणों का उपयोग करके घोषित किया जाना चाहिए let
के रूप में दायरे इन गुणों के लिए असाइनमेंट अवरोधन करने में असमर्थ है। को सौंपा List<T>
प्रॉपर्टीज़ ने आपके परिवर्तनों को दायरे फ़ाइल के लिए बनाए रखा है let
बजाय var
आप स्विफ्ट कंपाइलर को कोड का पता लगाने के लिए सूचीबद्ध करते हैं जो जीता "टी डू जो आप चाहते हैं।
के बदले सौंपने के बजाय List<T>
गुण जो आपको चाहिए रूप बदलना मौजूदा विधियों के माध्यम से संपत्ति का मूल्य RangeReplaceableCollection
किसको प्रोटोकॉल List<T>
अनुरूप है।
उदाहरण के लिए, एक नया कुत्ता जोड़ने के लिए:
person.dogs.append(lassie)
या मौजूदा कुत्तों को बदलने के लिए:
person.dogs.replaceSubrange(0..<person.dogs.count, with: [fido, spot])
क्यूं कर?
दायरे मॉडल कक्षाएं स्वचालित रूप से लागू होती हैंआपके स्थायी गुणों के लिए गेटर्स और सेटर जो अंतर्निहित डेटाबेस डेटा तक पहुंचते हैं। इन गेटर्स और सेटर को प्रदान करने के लिए, आपकी संपत्तियों को घोषित करना चाहिए dynamic
संशोधक। यह संशोधक स्विफ्ट को गतिशील समय पर सदस्य तक पहुंचने के बजाय गेट्स और सेटर के माध्यम से गुणों तक पहुंच को गतिशील रूप से भेजने के लिए कहता है। dynamic
संशोधक एक महत्वपूर्ण सीमा के साथ आता है: यह केवल उन प्रकारों के लिए समर्थित है जिन्हें उद्देश्य-सी में दर्शाया जा सकता है। ऐसा इसलिए है क्योंकि स्विफ्ट का डायनेमिक प्रेषण ऑब्जेक्टिव-सी रनटाइम के ऊपर बनाया गया है। List<T>
गुण।