2014-08-28 12 views
18

मैं स्विफ्ट सीख रहा हूं, और मैं इसमें Dictionary देख सकता हूं।
लेकिन स्विफ्ट के साथ NSDictionary का उपयोग कर रहे कई उदाहरण हैं।
इन दोनों के बीच क्या अंतर है?
मैं PHP में एक सरणी की तरह स्विफ्ट में इंडेक्स के साथ एक सरणी का उपयोग करना चाहता हूं।
कौन सा उपयोग करने के लिए बेहतर है?स्विफ्ट में NSDictionary बनाम शब्दकोश के बीच क्या अंतर है?

उत्तर

12

शब्दकोश एक देशी स्विफ्ट संरचना है। NSDictionary एक कोको वर्ग है। वे एक दूसरे (सामान्य सीमाओं के भीतर) के लिए बंधे होते हैं, क्योंकि दस्तावेज़ बहुत स्पष्ट और पूरी तरह से समझाते हैं।

यह बिल्कुल ऐरे और एनएसएआरएआरई के समानांतर है।

+1

तो शब्दकोश + NSDictionary समान है? लेकिन मुझे लगता है कि इसे घोषित करने के दो तरीके हैं। तो मैं उलझन में हूँ। – TomSawyer

+0

वे "वही" हैं जो रनटाइम दोनों के बीच परिवर्तित हो जाएंगे। – CodaFi

+12

दरअसल, 'शब्दकोश' एक संरचना है, कक्षा नहीं। – newacct

2

यहाँ सौदा,

सभी इरादों और उद्देश्यों के लिए है, वे एक ही बात कर रहे हैं। जब तक आप Foundation आयात करते हैं, तब तक संकलक उन्हें एक ही चीज़ के रूप में जानता होगा।

विशिष्ट मतभेदों के लिए, thus Apple doc मदद करता है।

अवलोकन

NSObject सबसे ऑब्जेक्टिव-सी वर्ग पदानुक्रम की जड़ वर्ग है। NSObject के माध्यम से, ऑब्जेक्ट्स रनटाइम सिस्टम के लिए एक बुनियादी इंटरफ़ेस और उद्देश्य-सी ऑब्जेक्ट्स के रूप में व्यवहार करने की क्षमता प्राप्त करता है।

इसका अर्थ यह है कि संक्षेप में, NSObjects पुरानी (उद्देश्य सी) के समय से प्राचीन अवशेष हैं।

बेहतर क्या है, यह आपके ऊपर है। मुझे कोड को आधुनिक रखने के उद्देश्य से एनएस समकक्ष से बेहतर तेज़ी से ऑब्जेक्ट्स मिलते हैं, हालांकि यदि आप NSURLCONNECTION जैसे कोड का उपयोग कर रहे हैं, तो आपको एनएस ऑब्जेक्ट्स की आवश्यकता होती है, तो आपको एनएस ऑब्जेक्ट्स का उपयोग करना पड़ सकता है।

उम्मीद है कि इससे मदद मिलती है।

+1

हालांकि वे हैं? स्विफ्ट शब्दकोश मूल्य से गुजरते हैं, जबकि एनएसडीयूजी संदर्भ द्वारा पास होते हैं। –

4

व्यवहार में और स्विफ्ट की मजबूत प्रकार अवधारणा के संबंध में महत्वपूर्ण अंतर

  • NSDictionary आम तौर पर टाइप है अनिर्दिष्ट
  • Dictionary एक विशिष्ट प्रकार के लिए आते है।

इसलिए मूल Dictionary बेहतर है।

1

let dataArray = NSMutableArray() 

    let d0 = ["code":"AA","name":"American Airlines"] 
    let d1 = ["code":"BA","name":"British Airlines"] 
    let d2 = ["code":"DA","name":"Delta Airlines"] 

    dataArray.addObject(d0) 
    dataArray.addObject(d1) 
    dataArray.addObject(d2) 

बाद में इस उदाहरण पर विचार ...

let d0 = dataArray.objectAtIndex(0) as! [String:String] 
let lbl = UILabel() 
lbl.text = d0["code"] // no xcode warnings 

तेज

let d0 = dataArray.objectAtIndex(0) as! NSDictionary 

में NSDictionary का उपयोग करते हुए अब आप आकार में मूल्य शब्दकोश मजबूर करने की जरूरत है।

lbl1.text = d0["name"] as! String 
अनुभव से

- जब json प्रतिक्रियाओं के साथ काम - मैं NSDictionary का उपयोग किया है के रूप में यह शिथिल टाइप किया है और मुझे पता है कि यह वास्तव में क्या होता है इसकी गारंटी नहीं कर सकते हैं - सिर्फ इतना है कि वैध json है। इस उपयोग के मामले को संभालने के लिए देशी स्विफ्ट टूल्स की बढ़ती लाइब्रेरी है, मेरा सुझाव है कि यहां https://github.com/search?q=json+NSDictionary+swift&type=Code&utf8=%E2%9C%93

इस मामले में - आपको 'if let' नृत्य के साथ डेटा के आसपास हैक करना होगा।

if let results = json["result"] as? NSDictionary 

अंत में - NSMutableDictionary अधिक शब्दकोश के साथ बराबर के रूप में आप एक NSDictionary पर कुंजी/मान जोड़े उत्परिवर्तित करने में सक्षम नहीं होगा।

उदाहरण के लिए।

results["code"] = 100 // <-- BOOM 

आसपास काम -

let mResults = NSMutableDictionary(dictionary:results) 

mResults["code"] = NSNumber(100) // <-- OK 

जो स्पष्टीकरण भीख माँगता - आप केवल NSObjects (NSNumbers/NSArrays/NSCount/NSSet) NSMutableDictionaries अंदर छड़ी कर सकते हैं। स्विफ्ट शब्दकोश इस के आसपास हो जाता है।

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