Swift Language
structs
खोज…
संरचनाओं की मूल बातें
struct Repository {
let identifier: Int
let name: String
var description: String?
}
यह तीन संग्रहित गुणों के साथ एक Repository
संरचना को परिभाषित करता है, एक पूर्णांक identifier
, एक स्ट्रिंग name
और एक वैकल्पिक स्ट्रिंग description
। identifier
और 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