Swift 泛型

1. 节点泛型

Swift 中,有参数的函数必须指定参数的类型,现在有几个同名的函数实现相似的功能,但是参数的类型不同,例如:

func show(para: Int) {
	print("Hello \(para)")	
}
func show(para: String) {
	print("Hello \(para)")	
}
func show(para: Double) {
	print("Hello \(para)")	
}

虽然系统可以根据参数类型调用不同的函数,但在定义上这种方法过于冗余。下面是与上列有相同功能的泛型函数定义:

func shwo<T>(para: T) {
	print("Hello \(para)")
}

我们可以给这个泛型函数传入不同类型的值:

show("小明")//输出 ”Hello 小明“
show(11)//输出”Hello 11“

泛型函数在声明时使用了节点类型命名(通常情况下用字字母 T、U、V、这样的大写字母来表示)来代替实际类型名。节点类型在定义时不表示任何具体类型,在函数被调用时根据传入的实际类型来指定自身的类型。

如果函数的泛型列表中只有一个T,虽然具体类型不需要指定,但是每个节点类型的参数必须是相同类型的。
如果要定义多个不同类型的泛型,则需要在尖括号中加入多个节点:<T、U、V…>,在泛型函数名后面插入节点的声明

2.泛型协议

protocol SomeProtocol {
	associatedtype Element
	func elementMethod1(element: Element)
	func elementMethod2(element: Element)
}

这里虽然没有出现节点语法,但是上面的协议却是一个不折不扣的泛型协议,Element 起到了占位符的作用,指示了某种类型。

3.泛型对象

struct TestStruct<T: Comparable> {
    func elementMethond1(element: T) {
        print("\(element)")
    }
}

let test = TestStruct<Int>()
test.elementMethond1(element: 1)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值