上一章Swift教程请查看:swift闭包函数高级编程
在本文中,你将了解类型别名typealias及其在Swift中的用例。
类型别名允许在程序中为现有数据类型提供新名称,在声明类型别名之后,可以在整个程序中使用别名名称代替现有类型。
类型别名不创建新类型,它们只是为现有类型提供一个新名称。
typealias的主要目的是使我们的代码更具可读性,并且在上下文中更清晰,便于人们理解。
如何创建类型别名?
它使用关键字typealias声明为:
typealias name = existing type
在Swift中,大多数类型都可以使用typealias,它们可以是:
- 用于内置类型。(例如:String、Int)
- 用户定义的类型(如类,结构,枚举)
- 复杂类型(如闭包)
用于内置类型的Typealias
你可以为所有内建的数据类型使用typealias,如String、Int、Float等。
例如:
typealias StudentName = String
上面的声明允许在任何地方使用StudentName而不是String。如果你想创建一个字符串类型的常量但它更像是学生名。你可以这样做:
let name:StudentName = "Jack"
在不使用typealias的情况下,应该将类型为string的常量声明为:
let name:String = "Jack"
以上两个例子都创建了一个String类型的常量。但是使用typealias声明,我们的代码将变得更具可读性。
用户定义类型的Typealias
在许多情况下,你需要创建自己的数据类型,假设你想创建一个代表Student的类型,你可以使用一个类来创建它:
class Student {
}
现在一组学生可以表示为一个数组:
var students:Array<Student> = []
通过使用typealias
为数组<Student>创建自己的类型,可以使上述声明更具可读性:
typealias Students = Array<Student>
现在我们可以使我们的代码更具可读性:
var students:Students = []
复杂类型的Typealias
让我们再分析一个例子,假设我们有一个以闭包作为输入参数的方法。
如果你不了解闭包,也不要担心,把它想成一个特殊类型的函数。我们已经在文章中详细解释过:Swift闭包。
func someMethod(oncomp:(Int)->(String)){
}
上面的示例将闭包作为someMethod的输入,闭包接受一个Int值并返回字符串。
你可以看到使用(Int)->(String)对读者来说意义不大,你可以使用typealias为它提供一个新名称:
typealias CompletionHandler = (Int)->(String)
现在你可以重写的方法如下:
func someMethod(oncomp:CompletionHandler){
}
通过使用typealias,我们可以看到同样的代码看起来更清晰,而且对程序员更友好。