Swift学习

swift泛型

2019-04-26  本文已影响0人  彭磊PL

一、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()
    }
}
上一篇下一篇

猜你喜欢

热点阅读