在目标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时,警告显示和应用程序崩溃
任何人都可以解释,我怎么能阻止这一点。我从谷歌阅读了一些主题,但无法理解。任何人都可以帮助我。
答案 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)
}
这是解决方法,还有许多其他方法,可能会因为我保持简单而变得复杂。请让我知道这对你有没有用 !