मेरे उपयोग के मामले निम्नलिखित मॉडल पर आधारित है:क्या केवल स्थिर गुणों का उपयोग करके दो structs के बीच एक द्विपक्षीय संबंध स्थापित करना संभव है?
struct Person {
let name: String
let houses: [House]
}
struct House {
let owner: Person
}
अब, आदर्श मैं एक द्विदिश रिश्ता है कि एक ही स्वामी है, जहां एक मालिक भी अपने सभी घरों को पता होना चाहिए के लिए हर घर की आवश्यकता है बनाए रखने के लिए करना चाहते हैं।
उपरोक्त डेटा संरचनाओं का उपयोग करना, क्या House
और Person
के उदाहरण बनाना संभव है कि दोनों के बीच एक रिश्ता है और ऑब्जेक्ट्स अनिवार्य रूप से एक-दूसरे पर इंगित कर रहे हैं?
मुझे लगता है कि इसका वाक्यांश पहले से ही कुछ भ्रामक है, क्योंकि struct
के मूल्य अर्थशास्त्र के कारण, वे वास्तव में कहीं भी इंगित नहीं करते हैं बल्कि केवल मूल्यों की प्रतियां रखते हैं। ऐसा लगता है कि यह स्पष्ट होना चाहिए कि इन दोनों वस्तुओं को द्विपक्षीय संबंधों के साथ बनाना संभव नहीं है, लेकिन मैं अभी भी यह सुनिश्चित करना चाहता हूं और यहां इन प्रश्न पूछें!
एक स्पष्ट समाधान भी जब उन्हें घोषित let
के बजाय var
का उपयोग कर houses
और owner
चर बनाने के लिए हो सकता है, तो रिश्ते प्रत्येक struct
के प्रारंभकर्ता में बनाए रखा जा सकता है:
struct Person {
let name: String
var houses: [House]
init(name: String, houses: [House]) {
self.name = name
self.houses = houses
self.houses = houses.map { (house: House) in
var newHouse = house
newHouse.owner = self
return newHouse
}
}
}
struct House {
var owner: Person
init(owner: Person) {
self.owner = owner
var newHouses = self.owner.houses
newHouses.append(self)
self.owner = Person(name: owner.name, houses: newHouses)
}
}
हालांकि, क्या हुआ अगर मैं houses
और owner
निरंतर रखना चाहते हैं? जैसा कि मैंने कहा, ऐसा लगता है कि यह संभव नहीं है, लेकिन मुझे आश्चर्य है कि क्या यह हासिल करने के लिए कुछ फैंसी (शायद कार्यात्मक) तरीका है? मैं lenses के बारे में सोच रहा था, जिसका उपयोग गेटर्स और सेटर्स के रूप में किया जा सकता है जब अपरिवर्तनीय मॉडल से निपटने के लिए।
मैं स्विफ्ट या किसी अन्य प्रोग्रामिंग भाषा में किसी भी तरह के * वास्तव में आत्म-संदर्भित * * मेमोरी डेटा संरचनाओं के निर्माण को दृढ़ता से हतोत्साहित करता हूं। क्यूं कर? क्योंकि यह मेमोरी मैनेजर के लिए चीजों को बहुत मुश्किल बनाता है: सर्कुलर संदर्भों के कारण यह "मेमोरी लीक" का कारण बन सकता है। इसके अलावा: इन "बस structs" मत बनाओ। उन्हें "ऑब्जेक्ट्स" होने दें जो वे स्वाभाविक रूप से हैं। –