One of the most powerful and defining features of Swift is the concept of Optionals.
An optional represents two possibilities: either there is a value, and you can unwrap the optional to access that value, or there isn't a value at all.
This completely eliminates the dreaded NullPointerException found in many other programming languages.
In Swift, variables cannot be "empty" or "null" by default. They must always hold a valid value of their declared type.
If a variable might temporarily have no value, you must declare it as an optional.
You do this by adding a question mark ? after the type declaration.
var name: String = "Akash" // name = nil // Error! A normal String cannot be nil.var nickname: String? = "Intricate" nickname = nil // This is perfectly fine!
print(nickname) // Outputs "nil"
If an optional has a value, it is wrapped inside a protective container. You cannot use it directly as a normal value.
You must "unwrap" it. If you are 100% certain the optional contains a value, you can forcibly unwrap it using an exclamation mark !.
var age: Int? = 25// We use ! to force unwrap the optional integer print("I am \(age!) years old.")
Warning: If you use ! on an optional that is currently nil, your application will crash immediately!
To safely unwrap an optional without risking a crash, Swift provides a feature called Optional Binding.
You use an if let statement to check if the optional contains a value.
If it does, the value is temporarily extracted into a new constant that you can safely use within the if block.
var favoriteColor: String? = "Blue"if let color = favoriteColor { print("My favorite color is \(color).") } else { print("I don't have a favorite color.") }
This is the most common and safest way to handle optionals in Swift.
Sometimes you just want to provide a default fallback value if an optional happens to be nil.
You can do this elegantly using the nil-coalescing operator ??.
var userCity: String? = nil let defaultCity = "New York"let finalCity = userCity ?? defaultCity print("Shipping to: \(finalCity)")
Because userCity is nil, the operator automatically falls back to "New York".
Which symbol is used to declare a variable as an Optional in Swift?