Swift version: 5.10
Swift has a built-in function called fatalError()
, which forces your application to crash. This might sound useful, but bear with me – this is an indispensable function for anyone serious about writing good Swift.
The fatalError()
function has a special return type called Never
, which Swift understands as meaning execution will never continue after this function has been called. As a result, you can use fatalError()
in methods that return a value but you have nothing sensible to return.
For example, the cellForRowAt
method must return a UITableViewCell
, but what happens if you dequeue a reusable cell and try to conditionally typecast it to your custom cell type, only for that to fail?
Normally you might try to return an empty, unconfigured cell, but that doesn’t really make much sense – if you got a bad cell back you have a bug, and trying to limp along will just cause issues.
Fortunately, fatalError()
can fix that: if your typecast fails you can call fatalError()
with a message explaining what happened, and if the typecast fails your app will terminate.
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as? MyCustomCell else {
fatalError("Failed to load a MyCustomCell from the table.")
}
return cell
}
Obviously you never want that code to get hit in production, but using fatalError()
helps stop that from happening – you will now get a very obvious problem in development if things aren’t going well.
SPONSORED Take the pain out of configuring and testing your paywalls. RevenueCat's all new Paywall Editor allow you to remotely configure your paywall view without any code changes or app updates.
Sponsor Hacking with Swift and reach the world's largest Swift community!
Available from iOS – learn more in my book Pro Swift
This is part of the Swift Knowledge Base, a free, searchable collection of solutions for common iOS questions.
Link copied to your pasteboard.