What is difference between NSDictionary vs Dictionary in Swift?

Vikram Kumar
3 min readJan 29, 2024

--

In Swift, when dealing with key-value pairs, developers often encounter two primary data structures: NSDictionary and Dictionary. While both serve similar purposes, they have significant differences in terms of syntax, usage, and underlying implementations. This article aims to elucidate these disparities, offering insights into when and how to use each type effectively.

Photo by Rubén Menárguez on Unsplash

NSDictionary:

NSDictionary is a class in Swift that represents an unordered collection of key-value pairs. It is part of the Foundation framework and has its roots in Objective-C. Here are some key features of NSDictionary:

  • Objective-C Compatibility: NSDictionary is designed to bridge the gap between Objective-C and Swift, allowing seamless interoperability between codebases written in both languages.
  • Unmodifiable Structure: Once initialized, the contents of an NSDictionary instance cannot be modified. This immutability ensures data integrity but requires creating a new instance to make any changes.
  • Dynamic Typing: NSDictionary can hold any type of object as a key or value, making it suitable for handling heterogeneous data.

Example of NSDictionary in Swift:

// Creating an NSDictionary instance
let nsDictionary: NSDictionary = ["name": "John", "age": 30, "isStudent": true]

// Accessing values using keys
let name = nsDictionary["name"] as? String
let age = nsDictionary["age"] as? Int
let isStudent = nsDictionary["isStudent"] as? Bool

Dictionary:

Dictionary is a native Swift type that provides a collection of key-value pairs. Unlike NSDictionary, it is a struct rather than a class. Here are the distinguishing characteristics of Dictionary:

  • Type Safety: Dictionary is strongly typed, meaning you must specify the types of keys and values it will contain at the time of declaration. This helps prevent runtime errors and enhances code clarity.
  • Mutability: Unlike NSDictionary, Dictionary instances are mutable by default. You can add, remove, or update key-value pairs without creating a new instance.
  • Swift-Centric Syntax: Dictionary leverages Swift's syntax and features, offering a more idiomatic and intuitive way to work with key-value pairs.

Example of Dictionary in Swift:

// Creating a Dictionary instance
var dictionary: [String: Any] = ["name": "Jane", "age": 25, "isStudent": false]

// Accessing values using keys
let name = dictionary["name"] as? String
let age = dictionary["age"] as? Int
let isStudent = dictionary["isStudent"] as? Bool

// Modifying the dictionary
dictionary["age"] = 26
dictionary["isStudent"] = true
dictionary["city"] = "New York"

Key Differences:

  1. Mutability: NSDictionary is immutable, while Dictionary is mutable.
  2. Syntax: Dictionary leverages Swift's native syntax, whereas NSDictionary syntax is more verbose.
  3. Type Safety: Dictionary is type-safe, ensuring type correctness at compile time, while NSDictionary relies on dynamic typing.
  4. Performance: Dictionary generally offers better performance due to its Swift-native implementation.

Conclusion:

In Swift development, choosing between NSDictionary and Dictionary depends on various factors such as interoperability with Objective-C, mutability requirements, and type safety considerations. As a general rule, prefer using Dictionary for Swift-native projects due to its enhanced type safety, mutability, and performance benefits. However, when working with Objective-C APIs or interoperating with Objective-C code, NSDictionary remains a valuable option for seamless integration.

Happy Coding!!!

--

--

Vikram Kumar
Vikram Kumar

Written by Vikram Kumar

I am Vikram, a Senior iOS Developer at Matellio Inc. focused on writing clean and efficient code. Complex problem-solver with an analytical and driven mindset.

No responses yet