我正在学习Swift,我可以在其中看到Dictionary
但是有很多例子在Swift中使用NSDictionary
这两者之间有什么区别?
我想在Swift中使用带有索引的数组,就像PHP中的数组一样
哪一个更好用?
答案 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词典可以解决这个问题。