美文网首页
swift throws异常处理

swift throws异常处理

作者: 大也 | 来源:发表于2021-07-27 16:05 被阅读0次

Swift中throw和rethrows关键字用于异常处理(Error handling)

throw  func map<T>(_ transform: (Int) throws -> T) rethrows -> [T]

对于可能的异常通常可以用一个枚举来代表一类异常,这个枚举可以实现Error协议,比如:

// 错误类型枚举
enum ADClassHttpError: Error {
   
   case errorNoData
   case errorNetNoFound
   case errorDataFormatWrong
   case errorOther
   
   func errorDes() {
       
       switch self {
       case .errorNoData:
           print("请求成功没数据")
       case .errorNetNoFound:
           print("404nofound")
       case .errorDataFormatWrong:
           print("数据格式不对")
       default:
           print("其他错误")
       }
   }
}

函数定义

extension ADClassVC {
   func netThrow(type: NSInteger) throws -> NSString {
           
           print("开始处理错误")
        
           switch type {
           case 1:
               throw ADClassHttpError.errorNoData
           case 2:
               throw ADClassHttpError.errorDataFormatWrong
           case 3:
               throw ADClassHttpError.errorNetNoFound
           default:
               throw ADClassHttpError.errorOther
           }
       }
}

调用

   func netRequest() {
       /*
           第一种:
           通过guard let,传入的默认值:1, 会直接走到Swift case1, 抛出异常, guard let直接return
        */
       guard let error =  try? netThrow(type: 1) else {
           return
       }
       print(error)
       
       /*
                第二种:
                原理一样, 控制台会打印出: 出错了---1
        */
       do {
           
           let data = try netThrow(type: 1)
           
           print(data)

       } catch ADClassHttpError.errorNoData {
           
           print("出错了---errorNoData")
           
       } catch ADClassHttpError.errorNetNoFound {
           
           print("出错了---errorNetNoFound")
           
       } catch ADClassHttpError.errorDataFormatWrong {
           
           print("出错了---errorNetNoFound")
           
       } catch {
           
           print("出错了---others")
       }

       /*
         简写,catch let error as MyError, 打印错误值
       */
       do {
           
           let data = try netThrow(type: 10)
           
           print(data)
           
       } catch let error as ADClassHttpError {
           
           print(error)
           
       } catch {
           
           print("others")
       }
       
       // 通过try?来调用,返回num是nil
       let num = try? netThrow(type: 1)
       print(num as Any)
   }

//rethrows


//         rethrows
//
//     rethrows表明:函数本身不会抛出错误,但调用闭包参数抛出错误,那么它会将错误向上抛。
//     rethrows主要用于参数有闭包的时候,闭包本身会有抛出异常的情况。
//     rethrows作为一个标志,显示的要求调用者去处理这个异常(不处理往上抛)。
   func testRethrow(testThrowCall: (Int) throws -> String, num: Int) rethrows -> String {
       guard (try? netThrow(type: 1)) != nil else {
           return ""
       }
       return ""
   }

错误用法 会导致Error将自动抛给上层函数。如果最终没人处理,系统一样会崩溃闪退。 等于没作用还会造成错误寻找

   // noHandlerError函数声明了throws,一样没有处理异常,只是往上抛出,看有没有人去处理。!不捕捉Error,在当前函数增加throws声明,Error将自动抛给上层函数。如果最终没人处理,系统一样会崩溃闪退。
   func noHandlerError() throws {
       let num = try netThrow(type: 1)
       print(num)
   }

相关文章

  • swift throws异常处理

    Swift中throw和rethrows关键字用于异常处理(Error handling) 对于可能的异常通常可以...

  • Swift-15:throws与rethrows

    throws 和 rethrows 的用法与作用 Swift中 throws 和 rethrows 关键字用于异常...

  • 03.异常的抛出

    throws方式处理异常 A:throws使用:权限修饰符 返回值类型 方法名(形参列表) throws 异常类...

  • swift 中异常的处理方法

    swift 中什么时候需要处理异常,在调用系统某个方法的时,该方法最后有一个throws 说明该方法会抛出异常,如...

  • Java自学-异常处理 处理

    Java的异常处理办法 try catch throws 异常处理常见手段: try catch finally ...

  • try/catch与throws异常捕捉

    方法声明throws Exception,意味着方法调者处理异常。 perform() throws JSONEx...

  • 03/13牛客刷题总结

    1.java中的异常处理包括声明异常、抛出异常、捕获异常和处理异常四个环节。 throw用于抛出异常 throws...

  • Java处理异常2种机制关键字区别解析

    在异常处理的过程中,throws和throw的区别是? throws:是在方法上对一个方法进行声明,而不进行处理,...

  • Java 异常处理

    原文链接 Java 异常处理 你将学到 Java中异常的捕获方法 throws/throw 和 finally 关...

  • Swift中的异常处理

    1、错误和异常处理2、断言3、fatalError 1、错误和异常处理 在方法后面加throws关键字表示这个方法...

网友评论

      本文标题:swift throws异常处理

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