无法打开'Optional.None'

Ton*_*ony 8 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
    }
}
Run Code Online (Sandbox Code Playgroud)

Lea*_*ros 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.
}
Run Code Online (Sandbox Code Playgroud)

您可以optionals在官方Swift语言指南中阅读更多相关信息.


Ton*_*ony 1

当您看到此错误时,这是​​由于访问了诸如未链接的 IBOutlet 之类的对象。它说 unwrap 的原因是因为当访问可选对象时,大多数对象都以允许 nil 值的方式包装,并且当访问可选对象时,您正在“展开”对象以访问其值,此错误表示没有分配给变量的值。

例如在这段代码中

var str:String? = nil
var empty = str!.isEmpty
Run Code Online (Sandbox Code Playgroud)

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

Can't unwrap Optional.None error
Run Code Online (Sandbox Code Playgroud)