美文网首页
Swift throws 处理异常

Swift throws 处理异常

作者: 丶天空蓝丶 | 来源:发表于2023-06-27 16:15 被阅读0次

一、需要在你异常处理的方法上面加上throws,下面就拿验证手机来举例

  func verifyPhoneLegal(_ phone: String) throws -> String {
        
    }

二、创建错误信息枚举

enum PhoneError: Error {
    case phoneEmpty //电话为空
    case phoneLengthError //长度不对
    case phoneRuleError //规则不对
}

三、根据不同的错误类型返回不同的错误枚举

    func verifyPhoneLegal(_ phone: String) throws -> String {
        if phone.isEmpty {
            throw PhoneError.phoneEmpty
        } else if phone.count != 11 {
            throw PhoneError.phoneLengthError
        } else if !phone.hasPrefix("1") {
            throw PhoneError.phoneRuleError
        }
        return phone
    }

四、使用这个方法,调用带有throws的方法必须使用try

try有3种使用方法
1、try? 系统帮助我们处理异常,如果该方法出现了异常,则该方法返回nil.如果没有异常,则返回对应的对象

        let phone = try? WSDateUtil().verifyPhoneLegal("")
        printLog(phone)
        let phone1 = try? WSDateUtil().verifyPhoneLegal("12345678900")
        printLog(phone1)

输出结果:
2023-06-28 15:14:15.898 LoginViewController.swift[139], buttonClick(sender:): nil
2023-06-28 15:14:15.905 LoginViewController.swift[141], buttonClick(sender:): Optional("12345678900")

2、try! 直接告诉系统,该方法没有异常.注意:如果该方法出现了异常,那么程序会报错(崩溃)

        let phone = try! WSDateUtil().verifyPhoneLegal("")
        printLog(phone)
直接报错 截屏2023-06-28 15.18.31.png

3、do catch 方法,错误会走catch
可以通过catch 里面 error 参数捕捉具体异常类型

        do {
            let phone = try WSDateUtil().verifyPhoneLegal("")
            printLog(phone)
        } catch {
            switch error {
            case PhoneError.phoneEmpty:
                printLog("手机号为空")
            default:
                printLog("其他错误")
            }
        }
        do {
            let phone = try WSDateUtil().verifyPhoneLegal("12345678900")
            printLog(phone)
        } catch {
            printLog(error)
        }

输出结果:
2023-06-28 15:25:16.637 LoginViewController.swift[143], buttonClick(sender:): 手机号为空
2023-06-28 15:25:16.644 LoginViewController.swift[150], buttonClick(sender:): 12345678900

第一个走catch,并且判断出来是手机号为空,第二个正确的直接在do里面返回我们想要的结果

五、do catch 特殊用法

1、每个catch里面都用switch,代码太冗余了,可以使用如下方法

do {
      let phone = try WSDateUtil().verifyPhoneLegal("")
      printLog(phone)
} catch {
    (error as! PhoneError).errorStr()
}

enum PhoneError: Error {
    case phoneEmpty //电话为空
    case phoneLengthError //长度不对
    case phoneRuleError //规则不对
    
    func errorStr() {
        switch self {
        case .phoneEmpty:
            printLog("电话为空")
        case .phoneLengthError:
            printLog("长度不对")
        case .phoneRuleError:
            printLog("规则不对")
        }
    }
}

输出结果:
2023-06-28 15:43:04.022 WSDateUtil.swift[23], errorStr(): 电话为空

2、throw 返回带参数结果,比喻手机号码长度不对时返回对应的长度
枚举

enum PhoneError: Error {
    case phoneEmpty //电话为空
    case phoneLengthError(Int) //长度不对
    case phoneRuleError //规则不对
    
}

方法

    func verifyPhoneLegal(_ phone: String) throws -> String {
        if phone.isEmpty {
            throw PhoneError.phoneEmpty
        } else if phone.count != 11 {
            throw PhoneError.phoneLengthError(phone.count)
        } else if !phone.hasPrefix("1") {
            throw PhoneError.phoneRuleError
        }
        return phone
    }

调用

        do {
            let phone = try WSDateUtil().verifyPhoneLegal("123")
            printLog(phone)
        } catch {
            switch error {
            case PhoneError.phoneEmpty:
                printLog("手机号为空")
            case let PhoneError.phoneLengthError(msg):
                printLog("手机号长度为\(msg)")
            default:
                printLog("其他错误")
            }
        }

输出结果:
2023-06-28 16:12:34.615 LoginViewController.swift[145], buttonClick(sender:): 手机号长度为3

相关文章

  • 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/lolnydtx.html