【发布时间】:2015-03-25 08:41:16
【问题描述】:
Stack Overflow 上有很多与此错误相关的问题。我在how Optionals work 和error in particular 上阅读了一些出色的帖子。但是,我还没有找到任何关于确定哪个值被设置为 nil 并首先导致错误的最佳方法的信息。
有没有什么好的调试技术可以找出是哪个 Optional 导致了这个错误?
【问题讨论】:
Stack Overflow 上有很多与此错误相关的问题。我在how Optionals work 和error in particular 上阅读了一些出色的帖子。但是,我还没有找到任何关于确定哪个值被设置为 nil 并首先导致错误的最佳方法的信息。
有没有什么好的调试技术可以找出是哪个 Optional 导致了这个错误?
【问题讨论】:
这里至少有一半的答案(请其他受访者先阅读问题!):使用模拟器而不是实际的 iOS 设备。
调试器似乎非常擅长指出导致问题的恶意可选选项的行...除非您像我一样,不时选择直接在 iOS 设备上运行代码。在后一种情况下,调试器将我置于一些汇编代码的中间,而没有明显的堆栈跟踪。切换回模拟器会给出错误的确切代码行。
【讨论】:
您的 Xcode 没有在错误的代码行处崩溃?
这不是对问题的回应,但重要的是要注意:
When you are not sure about an optional variable, you have to verify if it contains value or not, by using a pattern like this:
var myOptional : String?
if let aString = myOptional {
//do your work with aString.
}
【讨论】:
什么是基本的可选值?当你放置?在一个可选的数据类型之后,如果它被解包并且出现 nil,则没有错误,但你放置“!”数据类型后有感叹号,然后如果它解包变量并出现 nil 则存在崩溃或错误,因此经常使用 optional as
var myVariable : DataType ? = DataType()
or
var myVariable : DataType ? = nil
or
var myVariable : DataType ? = value
Swift 中的可选项是一个变量,它可以保存一个值,也可以不保存值。可选项是通过附加一个 ?类型:
var myOptionalString:String? = "Hello"
有些地方可选项很有用:
【讨论】: