【问题标题】:Unwrapping an Optional value in Swift [duplicate]在 Swift 中展开可选值 [重复]
【发布时间】:2016-10-06 02:17:16
【问题描述】:

我对如何解开可选值感到困惑。我正在检查我的变量是否有任何 nil 值,但仍然出现错误。我正在尝试在 NSCollectionViewItem 内执行此逻辑。里面不可以吗?无论我做什么,我都会不断收到此错误:

致命错误:在展开可选值时意外发现 nil

import Cocoa

class ImageCollectionView_Item: NSCollectionViewItem {

@IBOutlet weak var label: NSTextField!

var test: String?

override func viewDidLoad() {
    super.viewDidLoad()

    if test != nil {
        print("success")
        label.stringValue = "success"
    } else {
        print("fail")
        label.stringValue = "fail"
    }
  }
}

【问题讨论】:

  • label.stringValue 上的错误在哪里?检查label IBOutlet 是否正确连接。
  • 标签连接正确。我将标签拖到我的 NSCollectionViewItem 上,无论我做什么,我仍然得到同样的错误。
  • 看来您的错误来自强制展开 label 而不是 test。尽管您断言插座已连接,但应用程序似乎并不同意。你能提供更多细节吗?这将有助于准确确认该错误是在哪一行引发的。此外,如果您将 label 切换为可选项,我相信您会发现它目前为零,但我们这里没有足够的信息来了解原因。

标签: swift nscollectionviewitem


【解决方案1】:

快速解开可选值:

if let t = test {
     //You can use t as the non optional value
     //This if statement will run if test (t) is not nil
     label.stringValue = "success"
}
else {
    //This will run if test is nil
    label.stringValue = "fail"
} 

【讨论】:

  • if let test = test {
  • 我仍然遇到同样的问题。它会引发同样的错误。
  • 它首先抛出一个警告值 "t" 从未被使用过,然后在这一行抛出致命错误 "label.stringValue = "fail" "
  • @NickBalistreri 您确定要在您的应用程序中的任何一点上为test 赋值吗?
  • 即使我为“test”分配了一个特定的值,我仍然会得到同样的错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-26
  • 1970-01-01
  • 2020-09-27
  • 1970-01-01
  • 2018-05-19
  • 1970-01-01
相关资源
最近更新 更多