【问题标题】:Swift: unexpectedly found nil while unwrapping an Optional valueSwift:在展开 Optional 值时意外发现 nil
【发布时间】:2015-05-28 07:48:20
【问题描述】:
var session = NSUserDefaults.standardUserDefaults().stringForKey("session")!
println(session)

我因以下错误而崩溃:

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

【问题讨论】:

  • 为什么它被否决了?
  • [swift] "unexpectedly found nil while unwrapping an Optional value" 有 430 条搜索结果,[swift] NSUserDefaults "unexpectedly found nil while unwrapping an Optional value" 有 6 条搜索结果——您确定它们都不能解决您的问题吗?
  • @MartinR 是的,我看到的搜索结果很少,每个人都发布了完整的源代码。作为一个新手,不可能通过数百行代码来找出我的问题。

标签: ios swift


【解决方案1】:

由于强制展开运算符,您正在崩溃!它试图从 nil 可选中强制展开一个值。

仅当已知可选项包含非 nil 值时,才应使用强制展开运算符。

您可以使用optional binding:

if let session = NSUserDefaults.standardUserDefaults().stringForKey("session") {
    printString(session)
}

【讨论】:

  • 反对者,请发表评论。解决方案有什么问题?作为 stackoverflow 上 6 年的活跃成员,我知道单击 downvote 按钮非常容易,但如果没有适当的 cmets,请永远不要这样做。
  • 对于您的评论和回答,您将获得一个 UPvote - 我同意,人们来这里是为了学习,而当人们投反对票时,新手(像我一样)会被推迟。我们只需要一点指导就可以了..
【解决方案2】:

你应该使用nil coalescing operator“??”

let session = NSUserDefaults.standardUserDefaults().stringForKey("session") ?? ""

Xcode 8.2 • Swift 3.0.2

let session = UserDefaults.standard.string(forKey: "session") ?? ""

【讨论】:

    【解决方案3】:

    您需要在末尾删除!,或者您需要在打开包装之前进行检查:

    如果该位置有值放入会话常量并执行if的块,如果没有跳过if

    if let session = NSUserDefaults.standardUserDefaults().stringForKey("session") {
        println(session)
    }
    

    您应该查看有关 Optional 类型 here 的 Swift 文档

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-30
      • 2019-09-23
      • 1970-01-01
      相关资源
      最近更新 更多