iOS Swift No.22 - 泛型2

第二十二章 泛型

6. Extending a Generic Type (扩展泛型类型)

当我们扩展一个泛型类型的时候,并不需要提供类型参数列表作为扩展定义的一部分。 相反的,原类型定义中的类型参数在扩展体内依然是有效的,也就是说不需要我们我们在扩展定义里面在此定义类型参数,扩展体里的原类型参数可以作为当前扩展的类型参数使用。

下面这个例子是一个在泛型Stack类型上面扩展添加了一个只读的计算型属性topItem,该属性会返回栈最顶端的那个元素而不是从栈里面移除。

extension Stack {
   
	// 在当前的Stack里面扩展一个只读型属性topItem,
    var topItem: Element? {
   
    	// 在这个扩展的属性体内进行了三元运算。
        return items.isEmpty ? nil : items[items.count - 1]
    }
}

这个属性topItem返回的是一个类型为Element的可选值。如果说这个栈是一个空白的那么该属性则返回nil,如果栈不是空白而有值的情况下,该属性则会返回Items这个数组最后一个元素,栈是由一个叫Items的数组组成。

需要注意的是该扩展并没有定义类型参数列表,相反的是,Stack类型已有的类型参数名称 Element,被用在扩展中来表示计算型属性topItem的可选类型。现在这个计算行属性可以被Stack的任何一个实例所读取和查询最顶部的元素,而并不用从栈里面移除最顶部的元素。

// 假设这个栈不是空白的,那么则可以用可选绑定来读取作顶部的值
if let topItem = stackOfStrings.topItem {
   
    print("The top item on the stack is \(topItem).")
}
// 输出:The top item on the stack is tres

7. Type Constraints (类型约束)

函数swapTwoValues(_:_:)和类型Stack可以作用于任何类型,然而,有些时候添加某些类型约束

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值