खोज…


संरचनाओं की मूल बातें

struct Repository {
    let identifier: Int
    let name: String
    var description: String?
}

यह तीन संग्रहित गुणों के साथ एक Repository संरचना को परिभाषित करता है, एक पूर्णांक identifier , एक स्ट्रिंग name और एक वैकल्पिक स्ट्रिंग descriptionidentifier और name स्थिरांक हैं, क्योंकि उन्हें let वर्डवर्ड का उपयोग करके घोषित किया गया है। एक बार प्रारंभ के दौरान सेट होने के बाद, उन्हें संशोधित नहीं किया जा सकता है। वर्णन एक चर है। इसे संशोधित करने से संरचना का मूल्य अद्यतन होता है।

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

Repository तीन संग्रहीत गुण केवल जिनमें से शामिल description एक डिफ़ॉल्ट मान (है nil )। इसके अलावा यह अपने स्वयं के किसी भी शुरुआती को परिभाषित नहीं करता है, इसलिए इसे मुफ्त में एक सदस्य के लिए प्रारंभिक प्रारंभकर्ता प्राप्त होता है:

let newRepository = Repository(identifier: 0, name: "New Repository", description: "Brand New Repository")

संरचना मूल्य प्रकार हैं

वर्गों के विपरीत, जिन्हें संदर्भ द्वारा पारित किया जाता है, संरचनाएं नकल के माध्यम से पारित की जाती हैं:

first = "Hello"
second = first
first += " World!"
// first == "Hello World!"
// second == "Hello"

स्ट्रिंग एक संरचना है, इसलिए इसे असाइनमेंट पर कॉपी किया जाता है।

पहचान ऑपरेटर का उपयोग करके संरचनाओं की तुलना नहीं की जा सकती है:

window0 === window1 // works because a window is a class instance
"hello" === "hello" // error: binary operator '===' cannot be applied to two 'String' operands

प्रत्येक दो संरचना उदाहरणों को समान माना जाता है यदि वे बराबर की तुलना करते हैं।

सामूहिक रूप से, ये लक्षण हैं कि कक्षाओं से संरचनाएं भिन्न होती हैं, जो संरचनाओं को मूल्य प्रकार बनाती हैं।

एक संरचना उत्परिवर्तन

कि struct खुद का मूल्य बदल एक struct के एक विधि के साथ उपसर्ग होना चाहिए, mutating कीवर्ड

struct Counter {
    private var value = 0
    
    mutating func next() {
        value += 1
    }
}

जब आप उत्परिवर्तन विधियों का उपयोग कर सकते हैं

mutating तरीकों चर अंदर struct मूल्यों पर ही उपलब्ध हैं।

var counter = Counter()
counter.next()

जब आप उत्परिवर्तन विधियों का उपयोग नहीं कर सकते हैं

दूसरी ओर, mutating विधियाँ स्थिरांक के अंदर संरचनात्मक मूल्यों पर उपलब्ध नहीं हैं

let counter = Counter()
counter.next()
//  error: cannot use mutating member on immutable value: 'counter' is a 'let' constant

संरचनाएं विरासत में नहीं मिल सकती हैं

कक्षाओं के विपरीत, संरचनाएं विरासत में नहीं मिल सकती हैं:

class MyView: NSView { }  // works

struct MyInt: Int { } // error: inheritance from non-protocol type 'Int'

संरचनाएं, हालांकि, प्रोटोकॉल को अपना सकती हैं:

struct Vector: Hashable { ... }  // works

संरचना के सदस्यों तक पहुँचना

स्विफ्ट में, संरचनाएं अपने सदस्यों तक पहुंचने के लिए एक सरल "डॉट सिंटैक्स" का उपयोग करती हैं।

उदाहरण के लिए:

struct DeliveryRange {
  var range: Double
  let center: Location
}
let storeLocation = Location(latitude: 44.9871,
                             longitude: -93.2758)
var pizzaRange = DeliveryRange(range: 200,
                               center: storeLocation)

आप इस तरह से रेंज को एक्सेस (प्रिंट) कर सकते हैं:

    print(pizzaRange.range) // 200

तुम भी डॉट सिंटैक्स का उपयोग कर सदस्यों के सदस्यों तक पहुँच सकते हैं:

 print(pizzaRange.center.latitude) // 44.9871

आप डॉट सिंटैक्स के साथ मूल्यों को कैसे पढ़ सकते हैं, इसके समान, आप उन्हें असाइन भी कर सकते हैं।

pizzaRange.range = 250


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow