fatal error: unexpectedly found nil while unwrapping an Optional value(When adding to a array)

fatal error: unexpectedly found nil while unwrapping an Optional value(When adding to a array)

我有一些代码可以从 segue 接收值并用我拥有的索引号替换数组的某个元素。

变量的初始化为:

var noteTitles: [String] = ["Sample Note"]
var noteBodies: [String] = ["This is what lies within"]
var selectedNoteIndex: Int!
var newTitle: String!
var newBody: String!

我有一个 segue,它使最后 3 个值成为我希望它们成为的值。

在 viewDidLoad() 下,我有这个:

    if newTitle == nil && newBody == nil {

    }
    else {
        println("\(newTitle)")
        println("\(newBody)")
        println("\(selectedNoteIndex)")
        let realTitle: String = newTitle
        let realBody: String = newBody
        let realIndex: Int = selectedNoteIndex
        noteTitles[realIndex] = realTitle
        noteBodies[realIndex] = realBody
    }

我的日志显示:

New Note Title
This is what lies within
nil
fatal error: unexpectedly found nil while unwrapping an Optional value

然后我得到

Thread 1: EXC_BAD_INSTRUCTION(code=EXC_i385_INVOP,subcode=0x0)

上线

let realIndex: Int = selectedNoteIndex

谁能告诉我我做错了什么?

因为你没有给selectedNoteIndex赋值,所以显示为nil。首先,你必须检查它是否不是 nil 值。

if let selectedNoteIndex = realIndex{
    let realIndex: Int = selectedNoteIndex
}

var varName: Type! 声明了一个 隐式解包可选 .

表示在使用varName访问值时会自动解包,即不使用varName!.

因此,当它的值实际上是 nil 时,使用 let realIndex: Int = selectedNoteIndex 访问隐式展开的可选 selectedNoteIndex 会导致您遇到错误。


Apple 的 Swift 指南指出:

Implicitly unwrapped optionals should not be used when there is a possibility of a variable becoming nil at a later point. Always use a normal optional type if you need to check for a nil value during the lifetime of a variable.

我收到这些错误的原因是因为在转回主视图时,我没有使用正确的展开转场,而是使用了另一个显示转场,它删除了之前在视图控制器中的所有数据.通过创建一个 unwind segue,我能够将 segue 之前的值保留到详细视图并防止错误。