2016-02-26 10 views
24

मैं एक उद्देश्य-सी उदाहरण को स्विफ्ट 2 में बदलने की कोशिश करने की प्रक्रिया में हूं, लेकिन मैं एक छोटी सी समस्या में भाग रहा हूं। मूल ऑब्जेक्टिव-सी टुकड़ा:प्रासंगिक प्रकार 'AnyObject' का उपयोग शब्दकोष के साथ नहीं किया जा सकता है?

NSMutableArray *inputsOutputs = [NSMutableArray array]; 
... 
[inputsOutputs addObject:@{@"input" : input, @"output" : trackOutput}]; 

और मैं क्या सोचा स्विफ्ट कोड होना चाहिए:

var inputsOutputs = [Any?]() 
... 
inputsOutputs.append([ "input": input, "output": trackOutput ]) 

परिणामी त्रुटि है:

Contextual type 'AnyObject' cannot be used with dictionary literal? 

मैं Objective- कैसे बदल जाएगा इस मामले में सी स्विफ्ट करने के लिए?

मूल ऑब्जेक्टिव-सी: https://developer.apple.com/library/mac/samplecode/avsubtitleswriterOSX/Listings/avsubtitleswriter_main_m.html

+0

मेरे मामले में, इस सवाल का जवाब करने के लिए एक डाली जोड़ने के लिए शब्दकोश शाब्दिक 'Any' करने के लिए आवंटित किया जा रहा ... दुर्भाग्य से, मैं नहीं अप एक सरल उदाहरण है, जहां के साथ आ सकता है था यह आवश्यक है :( –

उत्तर

31

आपको लगता है कि सरणी की सामग्री String कुंजी और अज्ञात मूल्यों के साथ शब्दकोशों हैं देख सकते हैं।

इसलिए सरणी अधिक विशिष्ट घोषित

var inputsOutputs = [[String:AnyObject]]() 

स्विफ्ट 3 में JSON संग्रह प्रकार के लिए या शब्दकोश/सरणी केवल मूल्य प्रकार का उपयोग

var inputsOutputs = [[String:Any]]() 
+0

धन्यवाद, मैंने सोचा था कि यह JSON प्रकार की वस्तुओं की एक सरणी थी। ओबीजेसी को नहीं जानते, यह मदद नहीं कर रहा है। –

4

शामिल करता है, तो यह कम से कम ठीक होना चाहिए, स्विफ्ट 2+ में। मैं सिर्फ एक खेल के मैदान में निम्नलिखित की कोशिश की:

var objects = [Any?]() 
let dict = [ "one" : 1, "two" : 2 ] 
objects.append(dict) // prints [{["one": 1, "two": 2]}] 
objects.append([ "one" : 1, "two" : 2 ]) // prints [{["one": 1, "two": 2]}, {["one": 1, "two": 2]}] 
+0

मैंने सोचा कि मैं एक्सकोड 7.2.1 के साथ स्विफ्ट 2+ का उपयोग कर रहा था। मुझे यकीन नहीं है कि मैं कहां चेक करूंगा स्विफ्ट संस्करण अनुरूपता सेटिंग्स के लिए? –

+0

एक्सकोड 7 स्विफ्ट 2 का उपयोग करता है, इसलिए आपने उस प्रश्न का उत्तर दिया है। क्या यह संभव है कि आपके द्वारा देखी गई त्रुटि कुछ * अलग * रेखा पर थी? यही वह त्रुटि है जिसे आप देखेंगे 'AnyObject' पर एक सबस्क्रिप्ट का उपयोग करने का प्रयास किया। – NRitH

संबंधित मुद्दे

 संबंधित मुद्दे