Swift Optionals
A type the either has a “wrapped” value or is nil.
e.g.
let imagePaths = ["star": "/glyphs/star.png","portrait": "/images/content/portrait.jpg","spacer": "/images/shared/spacer.gif"]
Getting a dictionary’s value using a key returns an optional value, so imagePaths[“star”] has the type String?
e.g.
if let imagePath = imagePaths["star"] { print("The star image is at '(imagePath)'") } else { print("Couldn't find the image") }
would print “The star image is at ‘/glyphs/star.png’”
but “if let starPath = imagePaths[puppy]…..
would print “Couldn’t find the image”
To safely access the properties and methods of a wrapped instance, use the postfix optional chaining operator (postfix ?).
e.g.
if let isPNG = imagePaths["star"]?.hasSuffix(".png") { print("The star image is in PNG format") } // Prints "The star image is in PNG format"
if you want to supply a “default” value for when the optional is nil, use the nil-coalescing operator (??)
let defaultImagePath = "/images/default.png" let imagePath = imagePaths["puppy"] ?? defaultImagePath print(imagePath) // Prints "/images/default.png"
Unconditionally Unwrapping
When you’re certain that an optional contains a value, you can unconditionally unwrap it using the forced unwrap operator (!)
let number = Int("42")! print(number) // Prints "42"
Automatic Unwrapping
If you declare an optional variable with a ! instead of a ? it will automatically unwrap.
var myString:String? myString = "Hello, Swift!" if myString != nil { println( myString! ) }else { println("myString has nil value") }
Vs.
var myString:String! myString = "Hello, Swift!" if myString != nil { println(myString) }else { println("myString has nil value") }
NOTE: Unconditionally unwrapping a nil instance with ! triggers a runtime error.
see more at https://developer.apple.com/documentation/swift/optional
Leave a Reply