3 回答
TA贡献1719条经验 获得超6个赞
斯威夫特的错误处理(do/ try/ catch)是不是要解决运行时异常,如“索引超出范围”。
运行时异常(您可能还会看到称为trap,致命错误,断言失败等)是程序员错误的标志。除了内部-Ounchecked版本,Swift通常保证这些会使您的程序崩溃,而不是继续在错误/未定义状态下执行。这类崩溃可能是由于强制展开!,隐式展开,unowned引用滥用,溢出,fatalError()s和precondition()s及assert()s等导致的整数运算/转换(以及不幸的是,Objective-C异常)引起的。
解决方法是简单地避免这些情况。在您的情况下,检查数组的边界:
if indexPath.section < msgSections.count && indexPath.row < msgSections[indexPath.section].msg.count {
let msg = msgSections[indexPath.section].msg[indexPath.row]
// ...
}
(或者,正如rmaddy在评论中说的那样-调查为什么会发生此问题!它根本不应该发生。)
TA贡献1875条经验 获得超3个赞
斯威夫特4:
extension Collection where Indices.Iterator.Element == Index {
subscript (exist index: Index) -> Iterator.Element? {
return indices.contains(index) ? self[index] : nil
}
}
用法:
var index :Int = 6 // or whatever number you need
if let _ = myArray[exist: index] {
// do stuff
}
要么
var index :Int = 6 // or whatever number you need
guard let _ = myArray[exist: index] else { return }
- 3 回答
- 0 关注
- 786 浏览
添加回答
举报