Подтвердить что ты не робот

В чем разница между NSDictionary и Dictionary в Swift?

Я изучаю Swift, и я вижу Dictionary в нем.
Но есть много примеров, которые используют NSDictionary с Swift.
Какая разница между этими двумя?
Я хочу использовать массив с индексом в Swift, как массив в PHP.
Какой из них лучше использовать?

4b9b3361

Ответ 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 распространяется вокруг этого.