typealias理解小误区

alias在英语中是别名之意,那typealias,顾名思义,是指类型的别名。Swift的官方文档中对typealias关键词的演示,也是以赋值的形式,给一个现有类型取一个恰当的别名,便于在上下文中使用:

1
2
3
4
5
6
7
8
9
10
11
protocol Container {
typealias ItemType
//some other things

}

struct IntStack: Container {
typealias ItemType = Int
//some other things

}

如果ItemType的类型不是已有类型,还需另外定义:

1
2
3
4
5
6
struct SomeType { }
struct SomeStack: Container {
typealias ItemType = SomeType
//some other things

}

typealias的两种用法

根据上述typealias关键词的演示可知,typealias的使用一般分为两步:

  1. 独立定义一个目标类型SomeType
  2. 将目标类型SomeType=的形式赋值给typealias别名。

typealias的两步使用法,结构清晰,意义明了,但也略显啰嗦。如果目标类型SomeType比较轻,是一些简单的类型,则两步可以合为一步,直接在实现Container protocol的类型中,定义一个与别名同名的类型即可:

1
2
3
4
5
struct SomeStack: Container {
struct ItemType { }
//some other things

}

这样代码是不是显的更加紧凑简洁?当然这只适合于typealias的目标类型量级比较轻,且只用于typealias所在类型内时的情形。当typealias的目标类型体型庞大,应用范围不限于typealias所在类型时,还是分开定义为佳。

总结

typealias的两种用法表明,别名并不只是别名,它指代的是一个类型,这个类型的获得,既可以通过赋值,也可以自定义,也即千万不要把typealias局限于别名的意义。

分享到 评论