在Swift 2中捕捉“IndexOutOfBoundsException”

我在游乐场里得到了这段代码:

func throwsError() throws{ var x = [1,2] print(x[3]) } func start(){ do{ try throwsError() } catch let unknown{ "unknown: \(unknown)" } } start() 

所以显然'throwsError函数会抛出一个错误:

执行中断,原因:EXC_BAD_INSTRUCTION

有没有办法来抓住这个? 我在线阅读,为Array类编写了一个下标,它总是检查范围,但问题是更大的:我不能够抓住任何东西吗?

在Swift中,你什么都catch 。 你只能捕获在其他Swift代码或错误,通过调用目标C代码设置NSErrortypes的throw语句抛出的错误。

默认的数组下标引发exception ,但不会throw Swift 错误 ,所以不能使用try / catch。

另请参阅Erica Sadun 撰写的这篇文章 。

你可以写你自己的方法。 不是很高雅,但工作。

 enum ArrayError: ErrorType { case OutOfBounds(min: Int, max: Int) } extension Array { mutating func safeAssign(index:Int, value: Element) throws { guard self.count > index && index >= 0 else { throw ArrayError.OutOfBounds(min: 0, max: (self.count - 1)) } self[index] = value } } var myArray : [Float] = [1,2] do { try myArray.safeAssign(1, value: Float(5)) } catch ArrayError.OutOfBounds(let min, let max) { print("out of bounds : \(min) => \(max)") }