Swift学习之泛型

21 篇文章 0 订阅

简介

  • 泛型可以使我们在程序代码中定义一些可变的部分,在运行的时候指定。使用泛型可以最大限度地重用代码,保护类型安全以及提高性能。在Swift集合中数组、Set和字典都是泛型集合。

泛型函数

func isEquals<T:Comparable>(a:T,b:T)->Bool{
    return (a==b)
}
let a = 10
let b = 20
print(isEquals(a: a, b: b))
let c = 10.0
let d = 10.0
print(isEquals(a: c, b: d))

在函数名后面加,参数类型也被声明为T,T称为占位符,函数在每次调用时传入实际类型才能决定T所代表的类型。这个T就是一个泛型,如果有多个泛型可以用其他大写字母,当然用小写字母也不会报错,但不符合规范。后面的:Comparable是一个协议,泛型T必须遵该比较协议,才可以进行比较的操作a==b.在泛型后面加冒号和协议类名,称为泛型约束

  • 多个泛型作为参数类型如下:
func isEquals<T:Comparable,U>(a:T,b:U)->Bool
  • 泛型不仅可用于函数的参数类型,也可用于函数的返回值类型。

泛型类型

  • 泛型类型一般都是与集合有关的类型。在Swift集合中数组、Set和字典都是泛型集合。
struct Queue<T> {
    var items = [T]()
    mutating func queue(item: T){
        items.append(item)
    }
    mutating func dequeue()-> T?{
        if items.isEmpty {
            return nil
        }else{
            return items.remove(at: 0)
        }
    }
    
}
var generic = Queue<Int>()
generic.queue(item: 1)
generic.queue(item: 2)
generic.queue(item: 3)
generic.queue(item: 4)
print(generic.items)
print(generic.dequeue()!)
print(generic.dequeue()!)
var generic2 = Queue<String>()
generic2.queue(item: "a")
generic2.queue(item: "b")
generic2.queue(item: "c")
generic2.queue(item: "d")
print(generic2.items)
print(generic2.dequeue()!)
print(generic2.dequeue()!)

定义 Queue泛型类型队列,T是占位符,items是一个泛型数组集合属性,上面是基于结构体的泛型类型,也可以修改我基于类或枚举的泛型类型。

泛型扩展

  • 泛型还可以支持扩展,其他扩展没有什么区别。
extension Queue {
    func peek(pos: Int) -> T? {
        if pos < 0 || pos > items.count{
            return nil
        }else{
            return items[pos]
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值