/ / स्विफ्ट शब्दकोशों में संदर्भ संग्रह - तेजी से

स्विफ्ट शब्दकोशों में संदर्भ संग्रहीत करना - तेज़

मैं कुछ स्विफ्ट कोड लिखने की कोशिश कर रहा हूं जो स्टोर करता हैएक शब्दकोश में संग्रह का संग्रह (इसलिए इसे आसानी से एक प्लिस्ट के रूप में क्रमबद्ध किया जा सकता है)। उद्देश्य-सी में काफी सरल है, लेकिन मैं समझ रहा हूं कि स्विफ्ट में कुछ व्यवहार नहीं देख रहा हूं।

खेल का मैदान उदाहरण:

import Cocoa
typealias StringMap=Dictionary<String, String>
var collections = Dictionary<String, Array<StringMap>>();

// Add an empty "books" collection
collections["books"] = Array<StringMap>();

// Look up the books collection
var books = collections["books"] as Array<StringMap>!;

// Add an item to it
var book = ["name": "The Complete Peanuts", "author": "Charles M. Schulz"]
books.append(book);

// This is now 1
books.count

// Look up the books collection again
books = collections["books"] as Array<StringMap>!;

// This is zero
books.count

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

उत्तर:

उत्तर № 1 के लिए 1

स्विफ्ट में, Array तथा Dictionary कर रहे हैं struct, अर्थात् मान प्रकार। जब आप इसे किसी अन्य चर या स्थिर पर असाइन करते हैं, तो इसकी प्रतिलिपि बनाई जाएगी। उदाहरण के लिए:

var a:[Int] = []
var b = a
b.append(42)

// a -> []
// b -> [42]

तो, आपके मामले में, आपको अपना पूरा काम करना चाहिए collections चर:

typealias StringMap=Dictionary<String, String>

var collections = Dictionary<String, Array<StringMap>>();
collections["books"] = Array<StringMap>();

var book = ["name": "The Complete Peanuts", "author": "Charles M. Schulz"]
collections["books"]!.append(book)

collections["books"]!.count

या, सरणी तैयार करें, और शब्दकोश को असाइन करें:

var collections = Dictionary<String, Array<StringMap>>();

var books = Array<StringMap>();
var book = ["name": "The Complete Peanuts", "author": "Charles M. Schulz"]
books.append(book)

collections["books"] = books