如何使用try catch停止在swift3中崩溃

时间:2017-07-15 09:33:53

标签: swift

在目标c中,我们使用try catch来停止崩溃,例如

- (void)viewDidLoad {
[super viewDidLoad];

tableData = [NSArray arrayWithObjects:@"Egg Benedict", @"Mushroom Risotto", @"Full Breakfast", @"Hamburger", @"Ham and Egg Sandwich", @"Creme Brelee", @"White Chocolate Donut", @"Starbucks Coffee", @"Vegetable Curry", @"Instant Noodle with Egg", @"Noodle with BBQ Pork", @"Japanese Noodle with Pork", @"Green Tea", @"Thai Shrimp Cake", @"Angry Birds Cake", @"Ham and Cheese Panini", nil];



@try {
    NSLog(@"%@",tableData[1000]);
     } @catch (NSException *exception) {
    NSLog(@"%@",exception);
  }  
 }

但是当我使用swift 3时,警告显示和应用程序崩溃

enter image description here

任何人都可以解释,我怎么能阻止这一点。我从谷歌阅读了一些主题,但无法理解。任何人都可以帮助我。

2 个答案:

答案 0 :(得分:0)

Swift数组实现了一个下标,以便更容易地访问其成员。下标不能抛出。你可以实现Collection协议的扩展,并创建一个throw函数,如果索引低于Colllection的(.count-1),则获取成员,如果上面的话,则抛出错误。

或者你可以实现一个返回常量的下标,然后防止该常量,并在guard的else语句中抛出一个错误(但除非你在那个块中有try语句,否则它&# 39;会有点语法上的胖子。

答案 1 :(得分:0)

您可以通过简单的步骤实现它,请仔细检查:

// define your array
let array : [String] = ["One","Two"]

// define your array error
enum ArrayError : Error {
        case OutOfBoundsError(String)
}

// this method will return if its a valid or invalid value for array index.
private func getValueForIndex(index:Int)->String?{

    if array.count > index && index >= 0{
        return array[index]
    }else {
        return nil
    }

}

您可以使用guard let轻松处理它,并将错误引入catch块,如下所示:

    do {

        guard let index1 = try getValueForIndex(index: 0) else { throw ArrayError.OutOfBoundsError("Out of bounds for \(0)") }
        guard let index2 = try getValueForIndex(index: 1) else { throw ArrayError.OutOfBoundsError("Out of bounds for \(1)") }
        guard let index3 = try getValueForIndex(index: 2) else { throw ArrayError.OutOfBoundsError("Out of bounds for \(2)") }
        guard let index4 = try getValueForIndex(index: 3) else { throw ArrayError.OutOfBoundsError("Out of bounds for \(3)") }

    } catch{

        print(error)

    }

这是解决方法,还有许多其他方法,可能会因为我保持简单而变得复杂。请让我知道这对你有没有用 !