Swift try try! try?使用和区别

Swift try try! try?使用和区别


1、异常处理try catch的使用

1. swift异常处理 历史由来

  • Swift1.0版本 Cocoa Touch 的 NSError ,Swift并无真正的具有本身的异常处理机制
  • Swift2.0版本 加入 ErrorType protocol
  • Swift3.0版本 更名 Error protocol

2. Swift3.0 Error protocol 的使用

首先定义一个枚举,集成协议Error (Swift 2.0 的协议叫作ErrorType,3.0后协议更名Error)swift

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

3. throws和throw的使用

使用throws放在参数列表后面标明一个方法有异常抛出,标准格式 : func 方法名字 (参数列表) throws -> 返回值类型 并在方法内使用throw抛出异常code

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"
}

4. 使用do-catch处理异常

do {
    var str = try testFunc(str: "three")
} catch MyError.one {
    print("MyError.one")
} catch MyError.two {
    print("MyError.two")
} catch let error as MyError {
    print(error)
}

2、try?的使用

Swift2.0 后加入了新的关键字 try? , 若是不想处理异常那么能够用这个关键字,使用这个关键字返回一个可选值类型,若是有异常出现,返回nil.若是没有异常,则返回可选值.例子以下three

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

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"
}

var str = try? testFunc(str: "three")
print(str)

控制台输出it

nil
Program ended with exit code: 0

3、try!的使用

若是不想处理异常,并且不想让异常继续传播下去,可使用try!.这有点儿相似NSAssert().可是一旦使用try!后,在可能抛出异常的方法中抛出了异常,那么程序会马上中止.例子以下test

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

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"
}

var str = try! testFunc(str: "three")

控制台:程序奔溃掉~程序


4、try try? try! 的区别

  • try 出现异常处理异常
  • try? 不处理异常,返回一个可选值类型,出现异常返回nil
  • try! 不让异常继续传播,一旦出现异常程序中止,相似NSAssert()
相关文章
相关标签/搜索