我有这段代码:
var graphPoints:[Int] = DBController().dosmth()
这会调用一个应该返回Int
数组的方法。但是,如果传递的值不是Int
,我该如何处理这种情况呢?目前它只是抛出这个
fatal error: unexpectedly found nil while unwrapping an Optional value
我想这样抓住:
do{
var graphPoints:[Int] = DBController().dosmth()
}
catch{ }
但这会引发错误。如果有人能够指出我做错了什么,将不胜感激。
答案 0 :(得分:4)
首先,你无法理解这一点。这是一个编程错误。编程错误表明系统处于未知状态且无法恢复。如果发生这种情况,您就会遇到错误,并且必须修复该错误。
这不是"空指针异常。" Swift中没有这样的东西。此错误表示您几乎肯定在某个您不应该使用的地方使用!
。 !
表示"我绝对知道这会起作用,如果我错了,就会导致程序崩溃。"你错了,它破坏了程序。这不是例外。
查看代码并找到您错误地使用!
的地方。 "错误"意味着你无法证明的任何地方,只要通过查看你面前的代码,它就永远不会失败(无论如何,你想要崩溃)。如果你的意思是" 应该永远不会失败,"那么你的意思是使用?
,而不是!
。更好的是,尽可能地重新编写代码,以便实际上可以永远不会失败。这通常比任何类型的可选项更好(无论是显式还是隐式展开)。
答案 1 :(得分:3)
方法dosmth()
应该返回[Int]?
,这意味着它可以返回nil
,然后当使用graphPoints
时,如果让我们解开像
if let graphPoints = graphPoints {
use_graphPoints
}
或可选的nil合并,例如
grpahPoints?.count ?? 0
或者,您可以通过
将func dosmth()
设置为throws
func dosmth() throws {
}
然后在调用它时
do {
graphPoints:[Int] = try DBController().dosmth()
} catch {
print(error)
}
更多信息可以在这里找到:
答案 2 :(得分:0)
您可以包装可选值以使代码安全。
var graphPoints = [Int]()
if let array = DBController().dosmth() {
graphPoints = array
}