Tony
Tony

Reputation: 4609

Can't unwrap 'Optional.None'

When confronting the error fatal error:

Can't unwrap Optional.None

It is not that easy to trace this. What causes this error?

Code:

import UIKit

class WelcomeViewController: UIViewController {
    let cornerRad:CGFloat = 10.0
    @IBOutlet var label:UILabel
    @IBOutlet var lvl1:UIButton
    @IBOutlet var lvl2:UIButton
    @IBOutlet var lvl3:UIButton
    init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
        super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        lvl1.layer.cornerRadius = cornerRad
        lvl2.layer.cornerRadius = cornerRad
        lvl3.layer.cornerRadius = cornerRad
    }
}

Upvotes: 9

Views: 5953

Answers (3)

MK_iOS
MK_iOS

Reputation: 388

Fisrt check your storyboard UILabel connection. wheather your UILabel Object or connected or Not. If not it showing Fatal Error.

Upvotes: 0

Tony
Tony

Reputation: 4609

When you see this error this is due to an object such as an unlinked IBOutlet being accessed. The reason it says unwrap is because when accessing an optional object most objects are wrapped in such a way to allow the value of nil and when accessing an optional object you are "unwrapping" the object to access its value an this error denotes there was no value assigned to the variable.

For example in this code

var str:String? = nil
var empty = str!.isEmpty

The str variable is declared and the ? denotes that it can be null hence making it an OPTIONAL variable and as you can see it is set to nil. Then it creates a inferred boolean variable empty and sets it to str!.isEmpty which the ! denotes unwrap and since the value is nil you will see the

Can't unwrap Optional.None error

Upvotes: 1

Leandros
Leandros

Reputation: 16825

You get this error, because you try to access a optional variable, which has no value. Example:

// This String is an optional, which is created as nil.
var optional: String?

var myString = optional! // Error. Optional.None

optional = "Value"
if optional {
    var myString = optional! // Safe to unwrap.
}

You can read more about optionals in the official Swift language guide.

Upvotes: 8

Related Questions