An optional in Swift is a variable that can hold either a value or no value. Optionals are written by appending a ? to the type:
var myOptionalString:String? = "Hello"
Swift also introduces optional types, which handle the absence of a value. Optionals say either “there is a value, and it equals x” or “there isn’t a value at all”. Optionals are similar to using nil with pointers in Objective-C, but they work for any type, not just classes. Optionals are safer and more expressive than nil pointers in Objective-C and are at the heart of many of Swift’s most powerful features.
Optionals are an example of the fact that Swift is a type safe language. Swift helps you to be clear about the types of values your code can work with. If part of your code expects a String, type safety prevents you from passing it an Int by mistake. This enables you to catch and fix errors as early as possible in the development process.
Some places optionals are useful:
When a property can be there or not there, like middleName or spouse in a Person class
When a method can return a value or nothing, like searching for a match in an array
When a method can return either a result or get an error and return nothing
Delegate properties (which don't always have to be set)
For weak properties in classes. The thing they point to can be set to nil
For a large resource that might have to be released to reclaim memory