Swift version: 5.0
Some developers force unwrap optionals regularly, and some never do it, but it won’t surprise you to learn that both of those are pretty extreme and will cause you problems.
Some things are optional in Swift not because they may or may not be present, but because of historical reasons. For example, when you create a new application, your
AppDelegate class has an optional
UIWindow property called
window. Or there’s the
Bundle class, which has an optional
URL property called
resourceURL property that points to where your bundle’s resources are.
Both of those are optional, but if either of them fail something is seriously wrong with your application – should you really be trying to carry on running if your app is in such a corrupt state?
Think about when you try to instantiate a view controller with an identifier. Apple’s API here doesn’t throw errors, and doesn’t return an optional view controller – it just hard crashes, because there’s no sensible way for the app to continue if it’s missing a whole storyboard identifier.
You can apply that same logic to your code: if you’re trying to load a
UIImage from your asset catalog, force unwrapping is a sensible thing to do because if that image is missing it means you’ve either made a serious mistake or your app is in a damaged state and forcing a crash might help limit corruption of user data.
SPONSOR Tired of wasting time debugging your Swift app? Instabug’s SDK is here to help you minimize your debugging time by providing you with complete device details, network logs, and reproduction steps with every bug report. All data is attached automatically. It only takes a line of code to setup. Get started for free.
Available from iOS 8.0
Did this solution work for you? Please pass it on!
Other people are reading…
About the Swift Knowledge Base
This is part of the Swift Knowledge Base, a free, searchable collection of solutions for common iOS questions.