Swift中可以通过Error协议自定义错误信息
例如下面这种错误场景:
01.png可以通过自定义Error错误信息来抛出异常,Error信息可以定义为类
、枚举
、结构体
三种形式,用法如下所示:
class ClassError: Error {
var msg : String
init(msg: String) {
self.msg = msg
}
}
enum EnumError : Error {
case msg(String)
case outOfBounds(Int , Int)
case outOfMemory
// ......
}
struct StructError: Error {
var msg : String
}
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
var result = try? divide(20, 0)
print(result)
func divide(_ num1: Int, _ num2: Int) throws -> Int {
if num2 == 0 {
throw ClassError.init(msg: "0不能作为除数")
// throw EnumError.msg("0不能作为除数")
// throw StructError(msg: "0不能作为除数")
}
return num1 / num2
}
// func test() {
// do {
// let result = try divide(20, 0)
// print(result)
// } catch let EnumError.msg(errorMsg) {
// print("0不能作为除数\(errorMsg)")
// } catch let EnumError.outOfBounds(size, index) {
// print("下标越界\(size) \(index)")
// } catch EnumError.outOfMemory {
// print("内存溢出")
// } catch {
// print("其它错误")
// }
// }
}
}
如果分母传入0,则会出现下列错误:
02.png- try! : 如果发生错误, 程序会崩溃. 不推荐使用,此时对于这种崩溃,我们可以使用
do-catch
来捕捉,用法如下所示:
do-catch
用法一:
do-catch
用法二:
do-catch
用法三:
网友评论