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