स्विफ्ट - गुण

स्विफ्ट 4 भाषा सहयोगी मूल्यों के लिए वर्ग, गणना या संरचना के लिए गुण प्रदान करती है। गुणों को आगे संग्रहीत गुणों और कम्प्यूटेड गुणों में वर्गीकृत किया जा सकता है।

संग्रहीत गुणों और संगणित गुणों के बीच अंतर

संग्रहित संपत्ति गणना की गई संपत्ति
उदाहरण के लिए स्थिर और परिवर्तनीय मूल्यों को संग्रहीत करें मान को संग्रहीत करने के बजाय एक मूल्य की गणना करें
वर्गों और संरचनाओं द्वारा प्रदान किया गया कक्षाएं, गणना और संरचनाओं द्वारा प्रदान की जाती हैं

संग्रहित और संगणित दोनों प्रकार के गुण उदाहरण प्रकार से जुड़े हैं। जब गुण इसके प्रकार के मूल्यों से जुड़े होते हैं तो इसे 'प्रकार गुण' के रूप में परिभाषित किया जाता है। संग्रहित और गणना किए गए गुण आमतौर पर एक विशेष प्रकार के उदाहरणों से जुड़े होते हैं। हालांकि, गुण भी प्रकार के साथ ही जुड़े हो सकते हैं। ऐसे गुणों को प्रकार गुण के रूप में जाना जाता है। संपत्ति पर्यवेक्षकों का भी उपयोग किया जाता है

  • संग्रहीत गुणों के मूल्य का निरीक्षण करना
  • सुपरक्लास से प्राप्त विरासत वाले उपवर्ग की संपत्ति का निरीक्षण करना

संग्रहीत गुण

स्विफ्ट 4 ने स्थिरांक और चर के उदाहरणों को संग्रहीत करने के लिए संग्रहीत संपत्ति अवधारणा का परिचय दिया। स्थिरांक के स्थिर गुणों को 'लेट' कीवर्ड द्वारा परिभाषित किया जाता है और वेरिएबल्स के संग्रहित गुणों को 'वेर' कीवर्ड द्वारा परिभाषित किया जाता है।

  • परिभाषा के दौरान संग्रहीत संपत्ति 'डिफ़ॉल्ट मान' प्रदान करती है
  • प्रारंभ के दौरान उपयोगकर्ता प्रारंभिक मानों को आरंभ और संशोधित कर सकता है
struct Number {
   var digits: Int
   let pi = 3.1415
}

var n = Number(digits: 12345)
n.digits = 67

print("\(n.digits)")
print("\(n.pi)")

जब हम खेल के मैदान का उपयोग करके उपरोक्त कार्यक्रम चलाते हैं, तो हमें निम्नलिखित परिणाम मिलते हैं -

67
3.1415

उपरोक्त कोड में निम्नलिखित पंक्ति पर विचार करें -

let pi = 3.1415

यहां, चर पीआई को उदाहरण पीआई = 3.1415 के साथ संग्रहीत संपत्ति मूल्य के रूप में आरंभीकृत किया गया है। इसलिए, जब भी उदाहरण को संदर्भित किया जाता है, तो यह अकेले 3.1415 का मान रखेगा।

एक और तरीका है कि संग्रहित संपत्ति को स्थिर संरचनाओं के रूप में रखना है। इसलिए संरचनाओं के पूरे उदाहरण को 'स्थिर गुणों की स्थिरांक' माना जाएगा।

struct Number {
   var digits: Int
   let numbers = 3.1415
}

var n = Number(digits: 12345)
n.digits = 67

print("\(n.digits)")
print("\(n.numbers)")
n.numbers = 8.7

जब हम खेल के मैदान का उपयोग करके उपरोक्त कार्यक्रम चलाते हैं, तो हमें निम्नलिखित परिणाम मिलते हैं -

error: cannot assign to 'numbers' in 'n'
n.numbers = 8.7

'संख्या ’को Instead. the तक पुन: स्थापित करने के बजाय यह एक त्रुटि संदेश लौटाएगा जो यह दर्शाता है कि itial संख्या’ को स्थिर घोषित किया गया है।

आलसी संग्रहीत संपत्ति

स्विफ्ट 4 एक लचीली संपत्ति प्रदान करता है जिसे 'लेजी स्टोरेड प्रॉपर्टी' कहा जाता है, जहां यह पहली बार वैरिएबल के आरंभ होने पर प्रारंभिक मानों की गणना नहीं करेगा। 'आलसी' संशोधक का उपयोग परिवर्तनीय घोषणा से पहले किया जाता है ताकि यह एक आलसी संग्रहित संपत्ति के रूप में हो।

आलसी गुण का उपयोग किया जाता है -

  • वस्तु निर्माण में देरी करना।
  • जब संपत्ति एक वर्ग के अन्य हिस्सों पर निर्भर होती है, तो अभी तक ज्ञात नहीं है
class sample {
   lazy var no = number()    // `var` declaration is required.
}

class number {
   var name = "Swift 4"
}

var firstsample = sample()
print(firstsample.no.name)

जब हम खेल के मैदान का उपयोग करके उपरोक्त कार्यक्रम चलाते हैं, तो हमें निम्नलिखित परिणाम मिलते हैं -

Swift 4

आवृत्ति के चर

उद्देश्य सी में, संग्रहीत संपत्तियों में संग्रहीत संपत्ति में घोषित मूल्यों को संग्रहीत करने के लिए बैक अप उद्देश्यों के लिए उदाहरण चर भी हैं।

स्विफ्ट 4 इन दोनों अवधारणाओं को एक एकल 'संग्रहीत संपत्ति' घोषणा में एकीकृत करता है। एक ही उदाहरण चर होने और बदले में 'संग्रहीत संपत्ति' का बैक-अप मूल्य होने के बजाय, चर नाम, डेटा प्रकार और मेमोरी मैनेजमेंट फ़ंक्शंस द्वारा चर संपत्ति के बारे में एक ही स्थान में परिभाषित सभी एकीकृत जानकारी शामिल है।

संगणित गुण

गणना किए गए मूल्यों को संग्रहीत करने के बजाय अप्रत्यक्ष रूप से अन्य गुणों और मूल्यों को पुनः प्राप्त करने और सेट करने के लिए एक गेट्टर और एक वैकल्पिक सेटर प्रदान करते हैं।

class sample {
   var no1 = 0.0, no2 = 0.0
   var length = 300.0, breadth = 150.0

   var middle: (Double, Double) {
      get {
         return (length / 2, breadth / 2)
      }
      
      set(axis){
         no1 = axis.0 - (length / 2)
         no2 = axis.1 - (breadth / 2)
      }
   }
}

var result = sample()
print(result.middle)
result.middle = (0.0, 10.0)

print(result.no1)
print(result.no2)

जब हम खेल के मैदान का उपयोग करके उपरोक्त कार्यक्रम चलाते हैं, तो हमें निम्नलिखित परिणाम मिलते हैं -

(150.0, 75.0)
-150.0
-65.0

जब एक गणना की गई संपत्ति नए मान को अपरिभाषित छोड़ देती है, तो उस विशेष चर के लिए डिफ़ॉल्ट मान सेट किया जाएगा।

गणना गुण केवल पढ़ने के लिए गुण के रूप में

गणना की गई संपत्ति में केवल पढ़ने योग्य संपत्ति को गेट्टर के साथ एक संपत्ति के रूप में परिभाषित किया गया है लेकिन कोई सेटर नहीं है। इसका उपयोग हमेशा मान लौटाने के लिए किया जाता है। चर को 'के माध्यम से आगे पहुँचा जा सकता है।' सिंटैक्स लेकिन दूसरे मूल्य पर सेट नहीं किया जा सकता है।

class film {
   var head = ""
   var duration = 0.0
   var metaInfo: [String:String] {
      return [
         "head": self.head,
         "duration":"\(self.duration)"
      ]
   }
}

var movie = film()
movie.head = "Swift 4 Properties"
movie.duration = 3.09

print(movie.metaInfo["head"]!)
print(movie.metaInfo["duration"]!)

जब हम खेल के मैदान का उपयोग करके उपरोक्त कार्यक्रम चलाते हैं, तो हमें निम्नलिखित परिणाम मिलते हैं -

Swift 4 Properties
3.09

संपत्ति पर्यवेक्षकों के रूप में गणना किए गए गुण

संपत्ति मूल्यों का निरीक्षण करने और प्रतिक्रिया देने के लिए स्विफ्ट 4 में संपत्ति पर्यवेक्षकों का उपयोग किया जाता है। प्रत्येक और हर बार जब संपत्ति के मूल्य निर्धारित होते हैं संपत्ति पर्यवेक्षकों को बुलाया जाता है। आलसी संग्रहीत गुणों को छोड़कर हम 'ओवरराइडिंग' विधि द्वारा 'विरासत में मिली संपत्ति' में संपत्ति पर्यवेक्षकों को जोड़ सकते हैं।

संपत्ति पर्यवेक्षकों को या तो परिभाषित किया जा सकता है

  • मूल्य संग्रहीत करने से पहले - विलसेट

  • नया मान संग्रहीत करने के बाद - डिडसेट

  • जब किसी गुण को इनिशियलाइज़र विसेट में सेट किया जाता है और डिडसेट प्रेक्षकों को नहीं बुलाया जा सकता है।

class Samplepgm {
   var counter: Int = 0 {
      willSet(newTotal){
         print("Total Counter is: \(newTotal)")
      }
      
      didSet {
         if counter > oldValue {
            print("Newly Added Counter \(counter - oldValue)")
         }
      }
   }
}

let NewCounter = Samplepgm()
NewCounter.counter = 100
NewCounter.counter = 800

जब हम खेल के मैदान का उपयोग करके उपरोक्त कार्यक्रम चलाते हैं, तो हमें निम्नलिखित परिणाम मिलते हैं -

Total Counter is: 100
Newly Added Counter 100
Total Counter is: 800
Newly Added Counter 700

स्थानीय और वैश्विक चर

संपत्तियों की गणना और अवलोकन के लिए स्थानीय और वैश्विक चर घोषित किए जाते हैं।

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

प्रकार के गुण

गुण घुंघराले ब्रेस {} के साथ प्रकार परिभाषा अनुभाग में परिभाषित किए गए हैं और चर का दायरा भी पहले से परिभाषित किया गया है। मूल्य प्रकारों के प्रकारों को परिभाषित करने के लिए 'स्थिर' कीवर्ड का उपयोग किया जाता है और वर्ग प्रकारों के लिए 'क्लास' कीवर्ड का उपयोग किया जाता है।

वाक्य - विन्यास

struct Structname {
   static var storedTypeProperty = " "
   static var computedTypeProperty: Int {
      // return an Int value here
   }
}

enum Enumname {
   static var storedTypeProperty = " "
   static var computedTypeProperty: Int {
      // return an Int value here
   }
}

class Classname {
   class var computedTypeProperty: Int {
      // return an Int value here
   }
}

गुण की स्थापना और स्थापना

उदाहरण के गुणों की तरह ही प्रकार की संपत्तियों को 'के साथ' क्वियर और सेट किया जाता है। उदाहरण की ओर इशारा करने के बजाय केवल अकेले टाइप पर सिंटैक्स।

struct StudMarks {
   static let markCount = 97
   static var totalCount = 0
   
   var InternalMarks: Int = 0 {
      didSet {
         if InternalMarks > StudMarks.markCount {
            InternalMarks = StudMarks.markCount
         }
         if InternalMarks > StudMarks.totalCount {
            StudMarks.totalCount = InternalMarks
         }
      }
   }
}

var stud1Mark1 = StudMarks()
var stud1Mark2 = StudMarks()

stud1Mark1.InternalMarks = 98
print(stud1Mark1.InternalMarks)

stud1Mark2.InternalMarks = 87
print(stud1Mark2.InternalMarks)

जब हम खेल के मैदान का उपयोग करके उपरोक्त कार्यक्रम चलाते हैं, तो हमें निम्नलिखित परिणाम मिलते हैं -

97
87