Swift

Swift Day12 错误处理 泛型

2020-12-12  本文已影响0人  望穿秋水小作坊

一、错误(异常)

1. Swift 我们定义异常需要怎么做?
enum SomeError : Error {
    case illegalArg(String)
    case outOfBounds(Int, Int)
    case outOfMemory
}
2. 函数内部如何抛出错误?函数声明要加上什么?
func divide(_ num1: Int, _ num2: Int) throws -> Int {
    if num2 == 0 {
        throw SomeError.illegalArg("0 不能做为除数")
    }
    return num1 / num2
}
3. 如何调用一个有错误抛出的函数?
var result1 = try divide(100, 0);
var result2 = try? divide(100, 0);
var result3 = try! divide(100, 0);
4. 如何捕捉错误?错误爆出,会影响后续代码的执行吗?
func test() {
    print("1")
    do {
        print("2")
        print(try divide(100, 0))
        print("3")
    } catch let SomeError.illegalArg(msg) {
        print("参数异常:", msg)
    } catch let SomeError.outOfBounds(size, index) {
        print("下标越界:", size, index)
    } catch SomeError.outOfMemory {
        print("内存溢出")
    } catch {
        print("未知错误")
    }
    print("4")
}
5. try?、try!处理错误的时候和 try 有什么不同?
func test2() {
    print("1")
    var result1 = try? divide(20, 10)   // Optional(2), Int?
    var result2 = try? divide(20, 0)    // nil, Int?
    var result3 = try! divide(20, 10)   // 2, Int
}
6. defer 关键字有什么用?举一个实际例子说明?
defer

二、泛型(Generics)

1. 泛型(Generics)这个技术出现的目的是什么?
泛型
2. 思考下面代码,红框内的 <T> 可以省略掉吗?
示例
3. 思考为什么下列代码中,不需要像声明函数一样,加上 T 的类型说明?
示例
4. 我们声明 func 中泛型的时候一般用什么字母表示,我们声明 class 中的泛型的时候一般用什么字母表示,分别代表什么?
class 中使用泛型
5. 泛型在 Class、Enum、Struct 中(了解)
示例
6.思考泛型的本质是什么呢?或者说实现原理?
C++的做法 Int 的 swapValues 函数调用地址 Double 的swapValues 函数调用地址 Swift 的做法
7. 如果想在协议中使用泛型怎么做?
关联类型
8. 如果想对泛型进行约束要怎么做?(了解即可)
泛型约束
上一篇 下一篇

猜你喜欢

热点阅读