स्विफ्ट में शब्दकोशों के खाली सरणियों की शुरुआत


82

मैं स्विफ्ट में खाली सरणियों को इनिशियलाइज़ करने के लिए अपना सिर लपेटने की कोशिश कर रहा हूँ।

तार की एक सरणी के लिए यह बहुत सीधे आगे है:

var myStringArray: String[] = []
myStringArray += "a"
myStringArray += "b"

-> ["a", "b"]

और पूर्णांकों के लिए

var myIntArray: Int[] = []
myIntArray += 1
myIntArray += 2

-> [1, 2]

यह अन्य प्रकार की वस्तु जैसे NSImage ऑब्जेक्ट के लिए भी काम करता है:

let path = "/Library/Application Support/Apple/iChat Icons/Flags/"
let image1 = NSImage(byReferencingFile: path + "Brazil.png")
let image2 = NSImage(byReferencingFile: path + "Chile.png")

var myImageArray: NSImage[] = []
myImageArray += image1
myImageArray += image2

-> [<NSImage 0x7fe371c199f0 ...>, <NSImage 0x7fe371f39ea0 ...>]

हालाँकि मैं डिक्शनरी के खाली सरणी को इनिशियलाइज़ करने के लिए सिंटैक्स पर काम नहीं कर सकता।

मुझे पता है कि आपके पास शब्दकोशों की एक सरणी हो सकती है क्योंकि प्रारंभिक मूल्य कार्यों के साथ आरंभ करना:

let myDict1 = ["someKey":"someValue"]
let myDict2 = ["anotherKey":"anotherValue"]

var myDictArray = [myDict1]
myDictArray += myDict2

-> [["someKey": "someValue"], ["anotherKey": "anotherValue"]]

यह हालांकि (जो आप वाक्यविन्यास होने की उम्मीद करेंगे) विफल रहता है:

var myNewDictArray: Dictionary[] = []

त्रुटि के साथ Cannot convert the expression's type 'Dictionary[]' to type 'Hashable'

तो सवाल यह है कि डिक्शनरी आइटम्स की खाली सरणी को इनिशियलाइज़ करने का सही तरीका क्या है और यह वाक्य रचना var myNewDictArray: Dictionary[] = []काम क्यों नहीं करती है?

जवाबों:


219

आपको शब्दकोशों को प्रकार देने की आवश्यकता है:

var myNewDictArray: [Dictionary<String, Int>] = []

या

var myNewDictArray = [Dictionary<String, Int>]()

संपादित करें : आप भी छोटे वाक्यविन्यास का उपयोग कर सकते हैं:

var myNewDictArray: [[String:Int]] = []

या

var myNewDictArray = [[String:Int]]()

9

यह एक खाली, अपरिवर्तनीय शब्दकोश बनाएगा:

let dictionary = [ : ]

और यदि आप एक परिवर्तनशील चाहते हैं:

var dictionary = [ : ]

ये दोनों शब्दकोश डिफ़ॉल्ट हैं Dictionary<String?, AnyObject?>


आपका उदाहरण शब्दकोशों की अपरिहार्यता के बारे में नहीं है, लेकिन चर की अपरिहार्यता है।
सामी डिंडाने

6

इसका कारण यह नहीं है:

var myNewDictArray: Dictionary[] = []

जब आप इसे परिभाषित करते हैं, तो आपको शब्दकोश की कुंजियों और मूल्यों के लिए प्रकार प्रदान करने की आवश्यकता होती है। इनमें से प्रत्येक पंक्ति आपको स्ट्रिंग कुंजियों और स्ट्रिंग मानों के साथ शब्दकोशों का एक खाली सरणी बनाएगी:

var dictArray1: Dictionary<String, String>[] = Dictionary<String, String>[]()
var dictArray2: Dictionary<String, String>[] = []
var dictArray3 = Dictionary<String, String>[]()

1
हां, यह काम करता है। किसी भी विचार क्यों यह करने के दो तरीके हैं?
dwkns

स्विफ्ट संकलन-समय पर टाइप इंट्रेंस का उपयोग करता है , इसलिए एक चर की घोषणा करते समय आप या तो प्रकार निर्दिष्ट कर सकते हैं (जैसे dictArray2करता है) या तुरंत इसे कुछ ऐसा असाइन करें जिसे कंपाइलर पता लगा सकता है (जैसे dictArray3करता है)। पहली पंक्ति आवश्यक से अधिक क्रिया है, लेकिन संकलक ऐसा नहीं करता है।
नैट कुक


0

आप अब तत्व संघनन का उपयोग नहीं कर सकते।

class Image {}
Image i1
Image i2

var x = [Image]()

x += i1 // will not work (adding an element is ambiguous)
x += [i1] // this will work (concatenate an array to an array with the same elements)

x += [i1, i2] // also good


-1

आप इस का उपयोग कर सकते हैं यदि आप स्विफ्ट 2.3 का उपयोग करना चाहते हैं!

let path = "/Library/Application Support/Apple/iChat Icons/Flags/"
let image1 = UIImage(contentsOfFile: readPath + "Brazil.png")
let image2 = UIImage(contentsOfFile: readPath + "Chile.png")

var myImageArray = [UIImage]()
myImageArray.append(image1)
myImageArray.append(image2)

1
कृपया एक स्पष्टीकरण जोड़ें, कि आप वास्तव में क्या कोड करते हैं। और क्यों यह op की समस्या को ठीक करना चाहिए।
जम्मूतवीस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.