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 之前的值保留到详细视图并防止错误。
我有一些代码可以从 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 之前的值保留到详细视图并防止错误。