Swift基础知识之错误处理

2021-05-21  本文已影响0人  alfei13

一、开发过程中常见的错误

二、自定义错误

enum SomeError : Error {
    case illegalArg(String)
    case outOfBounds(Int, Int)
    case outOfMemory
}
func divide(_ num1: Int, _ num2: Int) throws -> Int {
    if num2 == 0 {
        throw SomeError.illegalArg("0 不能作为除数")
    }
    return num1 / num2
}
var result = try divide(20, 10)

三、do-catch

do {
    try divide(20, 0)
} catch let error {
    switch error {
    case let SomeError.illegalArg(msg):
        print("参数错误:", msg)
    default:
        print("其他错误")
    }
}

四、处理Error

func test() throws {
    print("1")
    print(try divide(20, 0))
    print("1")
}

五、try?、try!

func test() {
    print("1 = ")
    print(try? divide(20, 10)) // Optional(2)
    print(try? divide(20, 0)) // nil
    print(try! divide(20, 20)) // 1
}
test()

// a、b是等价的
var a = try? divide(20, 0)
var b: Int?
do {
    b = try divide(20, 0)
} catch { b = nil }

六、rethrows

func exec(_ fn: (Int, Int) throws -> Int, _ num1: Int, _ num2: Int) rethrows {
    print(try fn(num1, num2))
}

七、defer

func fn1() {print("fn1")}
func fn2() {print("fn2")}
func tests() {
    defer { fn1() }
    defer { fn2() }
}
tests() // fn2 fn1

八、assert (断言)

func divide(_ num1: Int, _ num2: Int) throws -> Int {
    assert(num2 != 0, "0 不能作为除数")
    return num1 / num2
}

九、fatalError

func test(_ num: Int) -> Int {
  if num >= 0 {
    return 1
  }
  fatalError("num 不能小于0")
}

十、局部作用域

do {
    var dog = Dog()
    dog.run()
}
do {
    var dog = Dog()
    dog.run()
}
上一篇 下一篇

猜你喜欢

热点阅读