美文网首页Swift相关
swift 关于错误异常的处理

swift 关于错误异常的处理

作者: Nulll | 来源:发表于2020-03-31 17:29 被阅读0次

    最近写swift遇到的一个小问题,已知也没有纪录一下。现在纪录一下遇到的在swift 上的异常处理报告。

    1、关于可能会报错的函数

    //普通函数
    func getobjByArray<T>(array:[T], index:Int) -> T {
        let result = array[index]
        return result
    }
    

    上面的代码明显会发生错误,如果数组越界了怎么办,如果index小于0呢?
    那么发生了错误要怎么处理呢。这时候可以定义一个带错误的返回。

    //即在返回处添加一个 throws 
    func getobjByArray<T>(array:[T], index:Int) throws -> T {
           guard index > 0 else {
                throw err
            }
            guard array.count > 0 else {
                throw arrayError.arrayIsEmpty
            }
            guard array.count > index else {
                throw arrayError.indexCrossBoard
            }
            let result = array[index]
            return result
    }
    enum arrayError:Error {
        case indexCrossBoard, indexLessZero, arrayIsEmpty
    }
    

    2、到了这里如果你在某个地方直接调用该函数是会发生错误的

     let v1 = self.getobjByArray(array: ["a","b","c"], index: 1)
    //错误提示:Call can throw, but it is not marked with 'try' and the error is not handled
    

    3、现在就到了怎么处理错误的方法了,关键字 try 来处理这样的错误

    try : 标准的处理方式, 该方式必须结合do catch来处理
    try? :函数回返回一个可选的值,如果可以返回。否则返回nil
    try! :强制返回。这样如果是无返回那么回崩掉

    try?的使用。 这个必须要配合 do-catch &try 使用

            do {
                let vv = try self.getobjByArray(array: [1,2,3], index: 2)
                print(vv)
            } catch let error {
                switch error {
                case arrayError.indexLessZero:
                    print("一个已知的错误")
                default:
                    print("未知错误")
                }
            }
    
    

    try? 的使用,这里有两种处理方式

    //a.guard try? ..这个是需要实现else 方法
            guard let v2 = try? self.getobjByArray(array: ["1",2,"3"], index: 1) else {
                return
            }
            print(value)
    //b.if try? 。这个是处理有结果的返回
            if let v3 = try? self.getobjByArray(array: [1,2,3], index: 2) {
                print(vvv)
            }
    
    

    try! 的使用

    let v4 = try! self.getobjByArray(array: ["a","b","c"], index: 1)
            print("有可能回崩溃的" + v4)
    

    相关文章

      网友评论

        本文标题:swift 关于错误异常的处理

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