博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
swift泛型的5个要点和代码
阅读量:5342 次
发布时间:2019-06-15

本文共 1325 字,大约阅读时间需要 4 分钟。

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

你可能感兴趣的文章
java开发配套版本
查看>>
MySQL的 Grant命令权限分配
查看>>
非阻塞的c/s,epoll服务器模型
查看>>
YII框架安装过程总结
查看>>
HDOJ(HDU) 1862 EXCEL排序(类对象的快排)
查看>>
Codeforces Round #381 (Div. 2) 复习倍增//
查看>>
Money类型转化为String去除小数点后0解决方法
查看>>
ArcScene 高程不同的表面无法叠加
查看>>
[ONTAK2010] Peaks
查看>>
DLL 导出函数
查看>>
windows超过最大连接数解决命令
查看>>
12个大调都是什么
查看>>
angular、jquery、vue 的区别与联系
查看>>
参数范围的选择
查看>>
使用 MarkDown & DocFX 升级 Rafy 帮助文档
查看>>
THUPC2019/CTS2019/APIO2019游记
查看>>
Nodejs Express模块server.address().address为::
查看>>
4.3.5 Sticks (POJ1011)
查看>>
POJ 2960 S-Nim 博弈论 sg函数
查看>>
Dijkstra模版
查看>>