无法打开'Optional.None'

时间:2014-06-03 02:39:47

标签: ios swift

遇到错误致命错误时:

  

无法打开Optional.None

追踪这一点并不容易。是什么导致了这个错误?

代码:

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
    }
}

3 个答案:

答案 0 :(得分:8)

您收到此错误,因为您尝试访问没有值的optional变量。 例如:

// 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.
}

您可以在官方Swift language guide中详细了解optionals

答案 1 :(得分:1)

当您看到此错误时,这是​​由于访问了未链接的IBOutlet等对象。它说unwrap的原因是因为当访问一个可选对象时,大多数对象被包装成允许nil的值,当访问一个可选对象时,你“解包”对象来访问它的值,这个错误表示没有赋值给变量的值。

例如在此代码中

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

声明了str变量并且?表示它可以为null,因此使其成为可选变量,您可以看到它设置为nil。然后它创建一个推断的布尔变量empty并将其设置为str!.isEmpty,其中!表示展开,因为值为零,您将看到

Can't unwrap Optional.None error

答案 2 :(得分:0)

首先检查你的故事板UILabel连接。您的UILabel对象是连接还是未连接。如果没有显示致命错误。