在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)") }