संरचना और वर्गों के बीच के अंतर को समझने के लिए, हमें मूल्य और संदर्भ प्रकारों के बीच मुख्य अंतर को जानना होगा। संरचनाएं मूल्य प्रकार हैं और इसका मतलब है कि उन पर हर परिवर्तन बस उस मूल्य को संशोधित करेगा, कक्षाएं संदर्भ प्रकार हैं और संदर्भ प्रकार में हर परिवर्तन स्मृति या संदर्भ के उस स्थान में आवंटित मूल्य को संशोधित करेगा। उदाहरण के लिए:
चलिए एक कक्षा से शुरू करते हैं, यह वर्ग इक्विटेबल के अनुरूप है बस उदाहरणों की तुलना करने में सक्षम होने के लिए, हम एक उदाहरण बनाते हैं जिसे pointClassInstanceA
अन्य कहा जाता है जिसे pointClassInstanceB
हम कक्षा A से कक्षा B में असाइन करते हैं, अब यह कहता है कि वे समान हैं ...
class PointClass: Equatable {
var x: Double
var y: Double
init(x: Double, y: Double) {
self.x = x
self.y = y
}
static func == (lhs: PointClass, rhs: PointClass) -> Bool {
return lhs.x == rhs.x && lhs.y == rhs.y
}
}
var pointClassInstanceA = PointClass(x: 0, y: 0)
var pointClassInstanceB = pointClassInstanceA
assert(pointClassInstanceA==pointClassInstanceB)
pointClassInstanceB.x = 10
print(pointClassInstanceA.x)
//this prints 10
ठीक है, यहाँ क्या हुआ क्यों अगर हमने बस पॉइंट्स के x मान को बदल दिया। ठीक है, यह दिखाता है कि संदर्भ ए कैसे काम करता है, जब हम उदाहरण ए को असाइन करते हैं, उदाहरण बी के मूल्य के रूप में और फिर हम उनमें से एक एक्स को संशोधित करते हैं यह दोनों एक्स को बदल देगा क्योंकि वे एक ही संदर्भ साझा करते हैं और जो बदल गया था, उसका मूल्य था संदर्भ।
चलो एक ही करते हैं लेकिन एक संरचना के साथ
struct PointStruct: Equatable {
var x: Double
var y: Double
init(x: Double, y: Double) {
self.x = x
self.y = y
}
static func == (lhs: PointStruct, rhs: PointStruct) -> Bool {
return lhs.x == rhs.x && lhs.y == rhs.y
}
}
var pointStructInstanceA = PointStruct(x: 0, y: 0)
var pointStructInstanceB = pointStructInstanceA
assert(pointStructInstanceA==pointStructInstanceB)
pointStructInstanceB.x = 100
print(pointStructInstanceA.x)
//this will print 0
हमारे पास मूल रूप से हमारी कक्षा के समान संरचना है, लेकिन अब आप देख सकते हैं कि जब आप पॉइंटस्ट्रोक्टइनस्टेंस ए के एक्स मान को प्रिंट करते हैं तो यह मामला नहीं बदला, और इसका कारण यह है कि मूल्य प्रकार अलग-अलग तरीके से काम करते हैं और उनके प्रत्येक उदाहरण पर प्रत्येक परिवर्तन होगा " स्वतंत्र "और दूसरे को प्रभावित नहीं करेगा।
स्विफ्ट अधिक मूल्य प्रकारों का उपयोग करने का सुझाव देता है और आप बता सकते हैं कि उनके पुस्तकालय उन मुद्दों से बचने के लिए संरचनाओं पर आधारित हैं जो संदर्भ प्रकार लाते हैं, जैसे अनजाने में एक मूल्य आदि को संशोधित करना। संरचना स्विफ्ट पर जाने का तरीका है। आशा करता हूँ की ये काम करेगा।