如何在EXC_BAD_INSTRUCTION上添加例外?

时间:2017-11-10 18:43:29

标签: swift exception-handling

我正在尝试为以下行添加例外:

let someData Int = Int(anArray[0])!

我想要异常,如果它是一个字符串而不是整数,它会忽略它。

我是swift的新手,但是在python中我可以做以下事情:

try:
    let someData Int = Int(anArray[0])!
except:
    pass

我尝试了以下内容:

guard let someData Int = Int(anArray[0])! else {
    print("error")
}

let someData Int = try! Int(anArray[0])!

我正在使用swift 3

2 个答案:

答案 0 :(得分:1)

你错过了正确的解决方案:

if let someData = Int(anArray[0]) {
    // someData is a valid Int
}

或者您可以使用guard

guard let someData = Int(anArray[0]) else {
    return // not valid
}

// Use someData here

请注意完全没有使用!。除非你知道它不会失败,否则不要强制解包选项。

答案 1 :(得分:1)

在Swift中,try-catch块看起来像这样:

do {
    //call a throwable function, such as 
    try JSONSerialization.data(withJSONObject: data)
} catch {
    //handle error
}

但是,您只能从 throwable 函数中捕获错误,这些函数在文档中始终标有 throws 关键字。 try关键字只能用于throwable函数,而do-catch块只有在do块中使用try关键字时才有效。

您无法捕获其他类型的异常,例如您试图捕获的强制转换/展开异常。

正确处理可选值的方法如果使用可选绑定。

guard let someData = Int(anArray[0]) else {
    print("error")
    return //bear in mind that the else of a guard statement has to exit the scope
}

如果您不想退出范围:

if let someData = Int(anArray[0]) {
    //use the integer
} else {
    //not an integer, handle the issue gracefully
}