swift泛型的5个要点和代码

1、泛型函数

泛型函数可以工作于任何函数类型:

func myswap<T>(inout a: T,inout b: T) {
 let temp = a
 a = b
 b = temp
}

2、泛型类型

通常在泛型函数中,swift允许你定义你自己的泛型类型,这些自定义类,结构体和枚举作用于任何类型,如同:Array和Dictionary的用法。

这部分向你展示如何写一个泛型集类型--Stack(栈)。一个栈是一系列值域的集合,和Array(数组)类似,但其实一个比Swift的Array类型更多限制的集合,一个数组可以允许其里面任何位置插入/删除操作,二栈只允许在集合的末端添加新的项,代码如下:

struct Stack<Element> {
// var containers = [Element]()
// mutating func push(e: Element) {
// containers.append(e)
// }
// mutating func pop() -> Element {
// return containers.removeLast()
// }
//}

 

3、泛型扩展

 

4、类型约束

Stack类型可以作用于任何类型不过有的时候对使用在泛型函数和泛型类型上的类型强制约束为某种特定类型是非常有用的,类型约束指定了一个必须继承自定义类的类型参数,或者遵循一个特定的协议或协议构成,代码如下

func index(arr:[Int],data: Int) ->Int {
// for (m,n) in arr.enumerate() {
// if n == data {
// return m
// }
// }
// return -1
//}

 

5、协议的关联类型

当定义一个协议时,有的时候声明一个或多个关联类型作为协议定义的一部分是非常有用的。一个关联类型给定作用于协议部分的类型一个节点名,(或别名)。作用于关联类型上实际类型是不需要指定的,直到该协议接受,关联类型被指定为typealisa关键字

protocol Container {
// typealias ItemType
//
//}
//
//
//extension Container where ItemType: MM {
// var b: Int {return 5}
//}
//
//
//extension Container where ItemType: NN {
// var b: Int {return 6}
//}
//class TestTest: Container {
// typealias ItemType = MMClass //如果这里改为MMClass,那么aaaa.b输出结构是5
//}
//class TestTest2: Container {
// typealias ItemType = Int
//}
//let aaaa = TestTest2()
//aaaa.b

转载于:https://www.cnblogs.com/tyty/p/4969821.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值