Swift泛型编程 geekband

这周有点空 就把学习内容分开写好了.
之前那周事情比较多文章就快餐的写完就好了

泛型是一个神奇的语法,当然你学会不感受到他奇妙之处.不要好像我那样愚挫,成天捉狂.
泛型允许在函数,枚举,结构,类中,以及协议上自定义形参
泛型指定一个或多个类型占位符,类型暂时不确定,等具体调用的时候再确定

//标准类型
func swapTwoInts(inout a: Int, inout b: Int){
let temporaryA = a
a = b
b = temporaryA
}
//泛型
func swapTwoValues<T>(inout a: T, inout b: T){
let temporaryA = a
a = b
b = temporaryA
}

//其中T可以是Int和String 还有很多 这里不举栗子
var someInt = 3
var anotherInt = 107
swapTwoValues(&someInt, &anotherInt)
//这时候T的类型为 int

var someString = "hello"
var anotherString = "world"
swapTwoValues(&someString, &anotherString)
  //这时候T的类型为 String

 ////设置U为不合法,应当基类类型或其他函数类型.
class swapOneValues <T> : swapTwoValues<U>{
//...
}

//参数实例化
var text1= swapTwoValues <String>()
var text2= swapTwoValues <Double>()
var text3= swapTwoValues <int>()

协议的关联类型<协议泛型>

protocol Container {
//关联类型 typealias可以为protocol定义一到多个管理类型
//关联类型也是占位符
//关联类型 可以看做为支持"泛型版的协议"
typealias ItemType

func append(item: ItemType)
var count: Int { get }
subscript(i: Int) -> ItemType { get }
}

class Stack<T>: Container {
//T= Container.ItemType 可以这样理解吧
typealias ItemType=T

var items = [T]()

func push(item: T) {
    items.append(item)
}

func pop() -> T {
    return items.removeLast()
}

func append(item: T) {
    self.push(item)
}

var count: Int {
    return items.count
}
subscript(i: Int) -> T {
    return items[i]
}
}

//泛型使用
var stack1=Stack<String>()
stack1.append("Earth")
var stack2=Stack<Int>()
stack2.append(1)
stack2.append(2)
stack2.count

泛型约束

//协议约束 + where句子约束

//where约束,指定关联类型必须符合某种协议,或者其他关联类型等
func find<T:Container where T.ItemType: Equatable>(sequence :T, item:T.ItemType)->Bool{

for index in 0..<sequence.count{
    
    if(sequence[index]==item){
        return true
    }
}

return false
}

//T:支持约束类型 Comparable是基类约束,另一种是协议约束
func max<T:Comparable>(array: [T]) -> T {
var value=array[0]

for index in 1..<array.count
{
    if array[index]>value {
        value=array[index]
    }
}
return value
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本章将会介绍 泛型所解决的问题泛型函数类型参数命名类型参数泛型类型扩展一个泛型类型类型约束关联类型泛型 Where...
    寒桥阅读 649评论 0 2
  • 泛型: 泛型是一种类型的占位符,具体的类型将会在之后被填充。由于Swift的严格类型检验,这是很有用的。在不能或者...
    小松树先生阅读 701评论 0 3
  • 136.泛型 泛型代码让你可以写出灵活,可重用的函数和类型,它们可以使用任何类型,受你定义的需求的约束。你可以写出...
    无沣阅读 1,522评论 0 4
  • 泛型的概念 泛型代码可根据自定义需求,写出适用于任何类型、灵活且可重用的函数和类型,避免重复的代码,用一种清晰和抽...
    伯wen阅读 410评论 0 2
  • 泛型(Generics) 泛型代码允许你定义适用于任何类型的,符合你设置的要求的,灵活且可重用的 函数和类型。泛型...
    果啤阅读 694评论 0 0