• Swift学习-Error


    主要学习如何抛出异常,捕获异常;

    1.抛出异常

    首先我们定义一个错误枚举。

    enum UserDetialError : Error{
        case noVaildName
        case noVaildAge
    }
    

    1.1.函数抛出异常写法:

    如果函数或初始值设定项可以抛出错误,则必须将throws修饰符添加到定义本身中,就在()之后、返回类型之前。
    具体形式如下:

    func userTest() throws -> <Return Type>{
    
    }
    

    throws关键字会将错误从函数传播到调用代码。否则,非抛出函数必须处理该函数代码本身内部的错误。
    下面是一个例子:

    func userTest() throws{
        if <condition_matches>{
            //Add your function code here
        }else{
            throw UserDetialError.noVaildName
        }
    }
    

    2.guard let

    在错误处理中,guard let非常有用,因为我们可以用抛出错误替换else块中的return语句。这样可以防止出现过多的if-else情况。

    func userTest(age:Int,name:String) throws{
        guard age > 0 else {
            throw UserDetialError.noVaildAge
        }
        guard name.count > 0 else {
            throw UserDetialError.noVaildName
        }
    }
    

    3.try do-catch

    do{
        try userTest(age:-1,name:"")
    }catch let error{
        print("Error:(error)")
    }
    //打印结果:Error:noVaildAge
    

    我们还可以这么实现

    do{
        try userTest(age:-1,name:"")
    }catch UserDetialError.noVaildName{
        print("The name isn't valid")
    }catch UserDetialError.noVaildAge{
        print("The age isn't valid")
    }catch let error{
        print("Unspecified Error:(error)")
    }
    

    4.初始化抛出异常

    enum StudentError:Error{
        case invaild(String)
        case tooShort
    }
    class Student{
        var name : String?
        init(name:String?) throws{
            guard let name = name else {
                throw StudentError.invaild("Invalid")
            }
            self.name = name
        }
        func myName(str:String) throws -> String{
            guard str.count > 5 else {
                throw StudentError.tooShort
            }
            return "My name is (str)"
        }
    }
    

    此时,我们初始化方法不能按照原来的方式,需要实现do try catch

    do{
        var s = try Student(name : nil)
    }catch let error{
        print(error)
    }
    //打印结果:invaild("Invalid")
    

    5.try,try?,try!

    try:是处理可能抛出错误的函数的最基本方法。
    try?:用于通过将错误转换为可选值来处理错误。这样,如果发生错误,函数将返回nil,并且已知的选项在Swift中可以是nil。
    try!:用于断言不会发生错误。仅当确认函数绝对不会发生错误时使用。
    try?、try!可以在没有do-catch块的情况下工作。

    var t1 = try? Student(name:nil)
    var t2 = try! Student(name:"Anupam")
    
  • 相关阅读:
    sqlite数据库如何远程连接?
    redis的两种持久化方案
    Netty入门系列(1) --使用Netty搭建服务端和客户端
    使用MQ消息队列的优缺点
    Netty基础系列(3) --彻底理解NIO
    Netty基础系列(2) --彻底理解阻塞非阻塞与同步异步的区别
    Netty基础系列(1) --linux网路I/O模型
    Jedis异常解决:NOAUTH Authentication required
    java并发编程(2) --Synchronized与Volatile区别
    java并发编程(1) --并发基础及其锁的原理
  • 原文地址:https://www.cnblogs.com/PotatoToEgg/p/15039447.html
Copyright © 2020-2023  润新知