Swift学习笔记-泛型

参考书籍:
[1]管蕾.张玲玲.朱元波.Swift开发实战[M]. 北京:人民邮电出版社.2014.10-1 ISBN 978-7-115-36827-0
[2]陈隽.刘媛媛.Swift入门很简单[M]. 北京:清华大学出版社.2015.01-01 ISBN 978-7-302-38880-7

一、泛型函数

泛型函数可以工作于任何类型,定义形式如下:

func 函数名<T> (参数:T,...,参数:T)->返回值类型{

 return 返回值类型
}

二、泛型类型

1、泛型枚举

定义形式:

enum 枚举名称 <T>{
 ...
}

2、泛型结构

定义形式:

struct 结构名称<T>{
 ...
}

3、泛型类

class 类名<T>{
 ...
}

三、泛型层次结构

在泛型层次结构中,泛型基类所在的任意类型参数都必须通过派生类沿着层次结构向上传递。

1、使用泛型基类

例如:

import Foundation

class NewClass1<T>{
    var obj1:T
    init(o:T){
        obj1 = o
    }
    func getobj1() -> T {
        return obj1
    }
}
class NewClass2<T>:NewClass1<T>{
    var obj2:T
    override init(o: T) {
        obj2 = o
        super.init(o : o)
    }
    func getobj2()->T{
        return obj2
    }
}
var newClass2=NewClass2<String>(o:"Hello Swift")
print(newClass2.obj2)
print(newClass2.obj1)

终端:

Hello Swift
Hello Swift
Program ended with exit code: 0

2、使用泛型派生类

import Foundation

class NewClass{
    var i:Int
    init(i:Int){
        self.i = i
    }
    func Geti() ->Int{
    return i
    }
    
}
class NewClass2<T>:NewClass{
    var b:T
    init(o:T,a:Int){
        self.b=o
        super.init(i:a)
    }
    func Getb()->T{
        return b
    }
}
var aaa=NewClass2<String>(o:"Hello Swift",a:10)
print(aaa.Getb())
print(aaa.Geti())

终端:

Hello Swift
10
Program ended with exit code: 0

四、多个类型参数的泛型

可以在泛型中定义多个类型参数,使用“,”分隔即可。

import Foundation

class NewClass<T,U,W>{
    func printvalue(value1: T,value2: U, value3:W){
        print(value1)
        print(value2)
        print(value3)
    }
}
let newclass = NewClass<Int, String, Double>()

newclass.printvalue( 133,value2: "Hello Swift",value3: 6.04)//忘记为什么value1省略了

终端:

133
Hello Swift
6.04
Program ended with exit code: 0

五、类型约束

对使用在泛型函数或者泛型类上的类型进行约束是非常有必要的。例如字典键类型必须是可哈希的等等。

泛型函数类型约束定义形式如下:

func 函数名称<T:SomeClass,U:SomeProtocol,...>(someT:T,someU:U){
 ...
}

六、类型关联

协议没看,以后用时再说

分享到:更多 ()