В чем разница между 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 обходит это.