- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
泛型 - Generics
泛型 - Generics
泛型
泛型代码可以让你写出根据⾃我需求定义、适⽤于任何类型的,灵活且可重⽤的 数
和类型。它的可以让你避免重复的代码,⽤⼀种清晰和抽象的⽅式来表达代码的意
图。
泛型是 Swift 强⼤特征中的其中⼀个,许多 Swift 标准库是通过泛型代码构建出来的。
事实上,泛型的使⽤贯穿了整本语⾔⼿册,只是你没有发现⽽已。例如,Swift 的数
组和字典类型都是泛型集。你可以创建⼀个Int数组,也可创建⼀个String数组,
或者甚⾄于可以是任何其他 Swift 的类型数据数组。同样的,你也可以创建存储任何
指定类型的字典 (dictionary ),⽽且这些类型可以是没有限制的。
泛型所解决的问题
这⾥是⼀个标准的,⾮泛型 数swapTwoInts,⽤来交换两个Int值:
func swapTwoInts(inout a: Int, inout b: Int) {
let temporaryA = a
a = b
b = temporaryA
}
这个 数使⽤写⼊读出 (in-out )参数来交换a和b的值,请参考写⼊读出参数。
swapTwoInts 数可以交换b的原始值到a,也可以交换a的原始值到b,你可以调⽤
这个 数交换两个Int变量值:
var someInt =
var anotherInt = 107
swapTwoInts(someInt, anotherInt)
println(someInt is now \(someInt), and anotherInt is now \(an
// 输出 someInt is now 107, and anotherInt is now
swapTwoInts 数是⾮常有⽤的,但是它只能交换Int值,如果你想要交换两
个String或者Double,就不得不写更多的 数,如 swapTwoStrings和
swapTwoDoublesfunctions,如同如下所⽰:
func swapTwoStrings(inout a: String, inout b: String) {
let temporaryA = a
a = b
b = temporaryA
}
func swapTwoDoubles(inout a: Double, inout b: Double) {
let temporaryA = a
a = b
b = temporaryA
}
你可能注意到 swapTwoInts、 swapTwoStrings和swapTwoDoubles 数功能都
是相同的,唯⼀不同之处就在于传⼊的变量类型不同,分别是Int、String和
Double。
但实际应⽤中通常需要⼀个⽤处更强⼤并且尽可能的考虑到更多的灵活性单个 数,
可以⽤来交换两个任何类型值,很幸运的是,泛型代码帮你解决了这种问题。 (⼀个
这种泛型 数后⾯已经定义好了。)
注意:
在所有三个 数中,a和b的类型是⼀样的。如果a和b不是相同的类型,
那它们俩就不能互换值。Swift 是类型安全的语⾔,所以它不允许⼀
个String类型的变量和⼀个Double类型的变量互相交换值。如果⼀定
要做,Swift 将报编译错误。
泛型函数
泛型函数可以⼯作于任何类型,这⾥是⼀个上⾯swapTwoInts 数的泛型版本,⽤
于交换两个值:
func swapTwoValuesT(inout a: T, inout b: T) {
let temporaryA = a
a = b
b = temporaryA
}
swapTwoValues 数主体和swapTwoInts 数是⼀样的,它只在第⼀⾏稍微有那
么⼀点点不同于swapTwoInts,如下所⽰:
func swapTwoInts(inout a: Int, inout b: Int)
func swapTwoValuesT(inout a: T, inout b: T)
这个 数的泛型版本使⽤了占位类型名字 (通常此情况下⽤字母T来表⽰)来代替实
际类型名 (如Int
文档评论(0)