美文网首页
Swift中的错误处理

Swift中的错误处理

作者: 缺一门 | 来源:发表于2018-03-28 17:45 被阅读0次
    1. 在Swift中Error是一个协议,只有在遵循Error协议以后才能使用throw来抛出一个错误
        enum nameErrorType: Error {
            case nilError
            case unknowError
        }
    
    1. 创建一个抛错的函数(使用 throws 来表示一个可以抛出错误的函数)
        //使用 `throws` 来表示一个可以抛出错误的函数
        func nameCheck (_ name: String) throws -> String{
            if name == "NULL" {
                throw nameErrorType.nilError
            }
            return name
        }
    

    3.错误处理

    • 在Swift中一般错误处理使用do-catch,在do代码块中使用try来标记代码块
        func errorTest() {
            do {
                let str = try nameCheck("NULL")
                print(str)
            } catch {
                print("nil error , Name is NULL!", error)
            }
        }
    
    • 可以使用多个catch块来处理错误。类似switch的处理。(最后加入一个空的catch,用于关闭catch)
        func errorTest() {
            do {
                let str = try nameCheck("NULL")
                print(str)
            } catch nameErrorType.nilError{
                print("nil error , Name is NULL!")
            } catch nameErrorType.unknowError{
                print("unknow error")
            } catch{
                //加入一个空的catch,用于关闭catch
            }
        }
    
    • 使用try?将错误处理结果转换为可选的,即函数如果是抛错那么返回值为nil
        let str = try? nameCheck("NULL")
    
    1. defer的使用
    • defer代码块表示在函数返回前,函数中最后执行的代码,从以下方法可以看出defer代码块的作用
        func deferCheck() {
            print("1")
            defer{
                print("3")
            }
            print("2")
        }
        //输出结果为
        //1
        //2
        //3
    
    • 所以在错误处理中我们经常会用到defer来处理一些我们无论如何都需要运行的功能
        func errorTest() {
            defer{
                print("check over")
            }
            do {
                let str = try nameCheck("NULL")
                print(str)
            } catch nameErrorType.nilError {
                print("nil error , Name is NULL!")
            } catch nameErrorType.unknowError{
                print("unknow error")
            } catch{
                //加入一个空的catch,用于关闭catch。否则会报错:Errors thrown from here are not handled because the enclosing catch is not exhaustive
            }
    
        }
        //输出结果
        //nil error , Name is NULL!
        //check over
    

    相关文章

      网友评论

          本文标题:Swift中的错误处理

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