美文网首页
Swift错误处理和泛型

Swift错误处理和泛型

作者: chrisdev | 来源:发表于2018-11-17 03:12 被阅读0次

    1. 错误处理, 可以用任何遵循Error协议的类型来表示错误. 可以用throw来抛出一个错误, 并用throws来标记一个可以抛出错误的函数. 如果在函数里抛出错误, 函数会立即返回并调用函数的代码处理错误.

    enum PrinterError: Error {    case outofPaper, noToner, onFire    }

    func send(job: Int, toPrinter printerName: String) throws -> String {

            if pringterName = "Never Has Toner" {    throw PrinterError.noToner    }

            return "Job sent"

    }

    2. 处理错误的方法: do-catch, 在do代码块里, 用try来在能抛出错误的函数前标记, 在catch代码里, 错误会自动赋予名字error, 如果不给其他名字的话. 另一种方式是: 使用try?来转换结果为可选项, 如果返回错误, 错误将会被忽略并且结果为nil, 否则结果是函数返回值的可选项. defer是函数返回后也会被执行的代码块, 

    do {

            let printerResponse = try?send(job: 1040, toPrinter: "Bi Sheng")

            print(printerResponse)

    } catch {

            print(error)

    }

    3. 泛型, Swift是一种静态类型化语言, 编译器明确知道代码处理什么类型的信息, 这就意味着不能将字符串传送给打算处理日期的代码. OC是可以的, 但是这种严格性, 意味着失去灵活性, 这个时候泛型就出场了. 事实上数组就是一种泛型. 创建一个泛型类型, 通常像对象一样命名, 然后在尖括号之间指定任意泛型类型. 传统上使用术语T, 但完全可以按照自己的意愿使用任何术语.

    class Tree<T> {

            var value: T                                    //T现在可以看做一种类型

            var children: [Tree <T>] = []        //任意数量的子tree对象

            init(value: Int) {    self.value = value    }

            func addChild(value: T) -> Tree <T> {

                    let newChild = Tree<T>(value: value)

                    children.append(newChild)

                    return newChild

            }

    }    //一旦定义了一个泛型类型, 就可以创建具体非泛型类型.

    //创建Int版本

    let IntegerTree = Tree<Int>(value: 5);    IntegerTree.addChild(5)

    //Stirng版本

    let stringTree = Tree<String>(value: "hello");    stringTree.addChild("world")

    相关文章

      网友评论

          本文标题:Swift错误处理和泛型

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