无法打开'Optional.None'

Posted

技术标签:

【中文标题】无法打开\'Optional.None\'【英文标题】:Can't unwrap 'Optional.None'无法打开'Optional.None' 【发布时间】:2014-06-03 02:39:46 【问题描述】:

遇到错误致命错误时:

无法打开 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
    

【问题讨论】:

最好显示示例代码,尤其是当您回答自己的问题时。 【参考方案1】:

您收到此错误,因为您尝试访问没有值的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的信息。

【讨论】:

【参考方案2】:

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

例如在这段代码中

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

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

Can't unwrap Optional.None error

【讨论】:

很好解释!按照这个可以解决上面的问题【参考方案3】:

首先检查您的故事板 UILabel 连接。无论您的 UILabel 对象还是已连接或未连接。如果不是,则显示致命错误。

【讨论】:

以上是关于无法打开'Optional.None'的主要内容,如果未能解决你的问题,请参考以下文章

UITextField - 无法打开 Optional.None

如何从另一个文档调用函数/无法打开 Optional.none

Swift UITableViewCell detailTextLabel.text 抛出错误“致命错误:无法打开 Optional.None”

phantomjs无法打开共享对象文件

IINA“无法打开文件和流”解决

无法打开源文件怎么解决