美文网首页
异常捕获

异常捕获

作者: Harely | 来源:发表于2020-03-12 12:44 被阅读0次

    Swift异常处理的历史由来

    • Swift1.0版本 Cocoa Touch 的 NSError ,Swift并没有真正的具备自己的异常处理机制;
    • Swift2.0版本 加入 ErrorType protocol;
    • Swift3.0版本 改名 Error protocol;

      Swift3.0 Error protocol 的使用首先定义一个枚举,集成协议Error (Swift 2.0 的协议叫做ErrorType,3.0后协议改名Error)

    enum MyError : Error {
        case one
        case two
        case three
    }
    

    三者区别

    • try 出现异常处理异常
    • try? 不处理异常,返回一个可选值类型,出现异常返回nil
    • try! 不让异常继续传播,一旦出现异常程序停止,类似NSAssert()

    try? 的使用

    try?, 如果不想处理异常那么可以用这个关键字,使用这个关键字返回一个可选值类型,如果有异常出现,返回nil.如果没有异常,则返回可选值

    func testFunc(str: String) throws -> String  {
        if str == "one" {
            throw MyError.one
        }else if str == "two" {
            throw MyError.two
        }else if str == "three" {
            throw MyError.three
        }
        return "ok"
    }
    
    let str = try? testFunc(str: "three")
    print(str)
    

    打印:nil


    throws和throw的使用

    do {
        let str = try testFunc(str: "three")
        let str1 = try testFunc(str: "333")
        print("++++>> \(str)")
        print("--->> \(str1)")
    
    } catch MyError.one {
        print("MyError.one")
    } catch MyError.two {
        print("MyError.two")
    } catch let error as MyError {
        print(error)
    } catch {
    
    }
    
    ///或者如下
    do {
        let str = try testFunc(str: "three")
        let str1 = try testFunc(str: "333")
        print("++++>> \(str)")
        print("--->> \(str1)")
    
    } catch MyError.one {
        print("MyError.one")
    } catch MyError.two {
        print("MyError.two")
    } catch {
        print(error)
    }
    

    都打印为:three


    try!

    如果不想处理异常,而且不想让异常继续传播下去,可以使用try!.这有点儿类似NSAssert().但是一旦使用try!后,在可能抛出异常的方法中抛出了异常,那么程序会立刻停止.

    let str = try! testFunc(str: "three")
    print(str)
    
    程序Crash

    相关文章

      网友评论

          本文标题:异常捕获

          本文链接:https://www.haomeiwen.com/subject/ldkujhtx.html