В чем разница между NSDictionary vs Dictionary в Swift?
Я учусь быстро, и я вижу Dictionary
в нем.
Но есть много примеров, которые используют NSDictionary
С Swift.
в чем разница между этими двумя?
Я хочу использовать массив с индексом в Swift, как массив в PHP.
какой из них лучше использовать?
4 ответов
словарь является родной структурой Swift. NSDictionary-это класс какао. Они соединены друг с другом (в обычных пределах), как очень ясно и полно объясняют документы.
Это точно параллельно Array и NSArray.
на практике и в отношении концепции сильного типа Swift существенная разница
-
NSDictionary
обычно тип не указан -
Dictionary
должен иметь определенный тип.
следовательно, уроженца Dictionary
предпочтительнее.
вот в чем дело,
для всех намерений и целей это одно и то же. Пока вы импортируете Foundation
компилятор будет знать их как одно и то же.
Что касается конкретных различий, таким образом, Apple doc помогает.
обзор
NSObject
- это корневой класс самый объективный-C класс иерархии. Через NSObject
, объекты наследуют базовый интерфейс системы и умение вести себя как Objective-C объекты.
что это значит, в двух словах, это NSObjects
древние реликвии старины (задача С) раз.
Что касается того, что лучше, это зависит от вас. Я нахожу объекты swift лучше, чем аналог ns, только для поддержания современного кода, однако вам может потребоваться использовать объекты ns, Если вы используете код, такой как NSURLCONNECTION
для этого требуются объекты ns.
надеюсь, что это помогает.
рассмотрим такой пример
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 в swift
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 больше наравне со словарем, поскольку вы не сможете мутировать пары ключ / значение на NSDictionary.
например.
results["code"] = 100 // <-- BOOM
работа по -
let mResults = NSMutableDictionary(dictionary:results)
mResults["code"] = NSNumber(100) // <-- OK
который просит разъяснение - вы можете только придерживаться NSObjects (NSNumbers / NSArrays / NSCount/NSSet) внутри NSMutableDictionaries. Словарь Swift обходит это.