Swift中NSDictionary与Dictionary有什么区别?

时间:2014-08-28 17:03:35

标签: arrays dictionary swift nsdictionary

我正在学习Swift,我可以在其中看到Dictionary 但是有很多例子在Swift中使用NSDictionary 这两者之间有什么区别?
我想在Swift中使用带有索引的数组,就像PHP中的数组一样 哪一个更好用?

4 个答案:

答案 0 :(得分:16)

Dictionary是一个原生的Swift结构。 NSDictionary是一个Cocoa类。它们彼此桥接(在通常的限制范围内),因为文档非常清楚和完整地解释。

它与Array和NSArray完全平行。

答案 1 :(得分:5)

在实践中,关于Swift的强类型概念,显着差异是

  • NSDictionary通常是未指定的类型
  • Dictionary应该具有特定类型。

因此最好使用原生Dictionary

答案 2 :(得分:2)

这是交易,

出于所有意图和目的,它们是相同的。只要导入Foundation,编译器就会将它们视为同一个东西。

至于具体差异,thus Apple doc有帮助。

  

概述

NSObject是大多数Objective-C类层次结构的根类。通过NSObject,对象继承了运行时系统的基本接口以及表现为Objective-C对象的能力。

简而言之,这意味着NSObjects是古代(客观c)时代的古代遗物。

至于什么更好,这取决于你。我发现swift对象比ns对象更好只是为了保持代码现代化,但是如果使用需要ns对象的代码NSURLCONNECTION,则可能必须使用ns对象。

希望这有帮助。

答案 3 :(得分: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

在swift中使用NSDictionary

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

现在你需要将字典值强制转化为形状。

lbl1.text = d0["name"] as! String

根据经验 - 在处理json响应时 - 我使用了NSDictionary,因为它是松散类型的,我不能保证确切地知道它包含什么 - 只是那是有效的json。有一个不断增长的原生swift工具库来处理这个用例,我建议看这里 https://github.com/search?q=json+NSDictionary+swift&type=Code&utf8=%E2%9C%93

在这种情况下 - 您需要使用'if let'跳舞来破解数据。

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

最后 - NSMutableDictionary与Dictionary更相似,因为你将无法改变NSDictionary上的键/值对。

例如。

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

工作 -

let mResults = NSMutableDictionary(dictionary:results)

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

这需要澄清 - 你只能在NSMutableDictionaries中粘贴NSObjects(NSNumbers / NSArrays / NSCount / NSSet)。 Swift词典可以解决这个问题。