Я изучаю Swift, и я вижу Dictionary
в нем.
Но есть много примеров, которые используют NSDictionary
с Swift.
Какая разница между этими двумя?
Я хочу использовать массив с индексом в Swift, как массив в PHP.
Какой из них лучше использовать?
В чем разница между NSDictionary и Dictionary в Swift?
Ответ 1
Словарь - это родная структура Swift. NSDictionary - это класс Cocoa. Они соединяются друг с другом (в обычных пределах), поскольку документы объясняют очень четко и полностью.
Он точно параллелен массиву и NSArray.
Ответ 2
На практике и в отношении концепции сильного типа Swift значительная разница
-
NSDictionary
обычно не задан. -
Dictionary
должен иметь определенный тип.
Следовательно, предпочтительным является нативный Dictionary
.
Ответ 3
Здесь сделка,
Во всех смыслах и целях они - одно и то же. Пока вы импортируете Foundation
, компилятор будет знать их как одно и то же.
Что касается конкретных отличий, таким образом помогает Apple doc.
Обзор
NSObject
является корневым классом большинства Objective-C классов. Через NSObject
объекты наследуют базовый интерфейс к системе времени выполнения и способность вести себя как объекты Objective-C.
Что это означает, в двух словах, это то, что NSObjects
являются древними реликвиями из старых (объективных) времен.
Что касается того, что лучше, это зависит от вас. Я считаю, что быстрые объекты лучше, чем аналог ns, только для того, чтобы сохранить современный код, однако вам, возможно, придется использовать объекты ns, если вы используете код типа NSURLCONNECTION
, для которого требуются объекты ns.
Надеюсь, что это поможет.
Ответ 4
Рассмотрим этот пример
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
Использование NSDictionary в быстрой
let d0 = dataArray.objectAtIndex(0) as! 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 results = json["result"] as? NSDictionary
lastly - NSMutableDictionary более похожа на словарь, так как вы не сможете мутировать пары ключ/значение в NSDictionary.
например.
results["code"] = 100 // <-- BOOM
работа вокруг -
let mResults = NSMutableDictionary(dictionary:results)
mResults["code"] = NSNumber(100) // <-- OK
который просит разъяснения - вы можете прикреплять NSObjects (NSNumbers/NSArrays/NSCount/NSSet) внутри NSMutableDictionaries. Словарь Swift распространяется вокруг этого.