swift泛型

作者: 彭磊PL | 来源:发表于2019-04-26 10:13 被阅读0次

    一、swift泛型介绍

    泛型是为swift编程灵活性的一种语法,在函数、枚举、结构体、类中都得到充分的应用,它的引入可以起到占位符的作用,当类型暂时不确定时,只有等到调用函数时才能确定具体类型的时候可以引入泛型。
    我们实际上已经使用过泛型了,例如:swift的Array和Dictionary类型都是泛型集

    二、swift泛型使用

    swift泛型相关使用可分为以下几点:
    1.泛型函数
    2.泛型类型
    3.泛型约束
    4.泛型协议

    1.泛型函数,函数参数或返回值类型用泛型表示

    //泛型函数定义式
    func 函数名<泛型1,泛型2,......>(形参列表)->返回值类型
    {
     // 函数体...
    }
    

    2.泛型类型,在定义类型时使用泛型

    使用也和泛型函数差不多,就是再类型名后面加上<泛型1,泛型2,...>,然后在类型里面直接使用泛型即可

    // 定义一个泛型结构体,用于压栈和出栈,泛型类型可以使用到类、结构体、枚举等各种类型
    struct Stack<T> {
    // 栈在这里是个数组存储形式,数组中存储的数据类型是泛型类型
      var items = [T]()
      // 因为压栈会修改实例值,需要加上mutating关键字
      mutating func push(item: T) {
        items.append(item)
      }
      // 因为出栈会修改实例值,需要加上mutating关键字
      mutating func pop() -> T {
        return items.removeLast()
      }
    }
    

    3.泛型约束,为泛型类型添加约束

    泛型约束大致分为以下几种:
    1.继承约束,泛型类型必须是某个类的子类类型
    2.协议约束,泛型类型必须遵循某种协议
    3.条件约束,泛型类型必须满足某种条件
    约束的大概使用格式
    约束的大概使用格式

    //继承约束使用格式

    func 函数名<泛型: 继承父类>(参数列表) -> 返回值 {
        //函数体,泛型类型是某个类的子类类型
    }
    //协议约束使用格式
    func 函数名<泛型: 协议>(参数列表) -> 返回值 {
        //函数体,泛型类型遵循某些协议
    }
    //条件约束使用格式
    func 函数名<泛型1, 泛型2 where 条件>(参数列表) -> 返回值 {
        //函数体,泛型类型满足某些条件
    }
    

    4.泛型协议和条件约束

    //定义一个泛型协议,和其他泛型使用方式不同,这里泛型是以关联类型形式使用的
    protocol Stackable{
        //声明一个关联类型,使用typealias关键字
        typealias ItemType
        mutating func push(item:ItemType)
        mutating func pop() -> ItemType
    }
     
    struct Stack<T>:Stackable{
        var store = [T]()
        mutating func push(item:T){//实现协议的push方法要求
            store.append(item)
        }
        mutating func pop() -> T {//实现协议的pop方法要求
            return store.removeLast()
        }
    }
    

    相关文章

      网友评论

        本文标题:swift泛型

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