官术网_书友最值得收藏!

Type aliases

Type aliases are a simple addition to the language; they let you reference simple or complex types by an alias. They support all declarations that you can imagine, from the simplest to the most complex.

The following block contains declarations for aliasing the following:

  • A string class into a MyString
  • A function declaration into a Block
  • A block that takes any argument and returns any value
  • A block that takes no argument and returns any value

Let's see the code block; they let you:

typealias MyString = String
typealias Block = () -> Void
typealias TypedBlock<T, U> = (T) -> U
typealias ReturningBlock<U> = () -> U

We could have also defined Block in the function of ReturningBlock:

typealias Block = ReturningBlock<()>

You can also use type aliases for protocol compositions and complex types, as follows:

  • You can declare a type that conforms to a protocol and is of a particular class
  • You can delete a type that conforms to multiple protocols

Let's see an example, as follows:

protocol SomeProtocol {}
protocol OtherProtocol {}

typealias ViewControllerProtocol = NSViewController & SomeProtocol
typealias BothProtocols = SomeProtocol & OtherProtocol

You will often find yourself using type aliases, in order to make your code more readable and more expressive. They are a powerful tool for hiding away some of the implementation complexity or verbosity when declaring long conformances. With type aliases, you can be encouraged to craft many protocols, each with a very small requirement list; then, you can compose all of those protocols when you need them, expressed as those types.

主站蜘蛛池模板: 通渭县| 临沂市| 运城市| 濮阳市| 富裕县| 来凤县| 安徽省| 新竹县| 广宁县| 绥滨县| 株洲市| 墨玉县| 马山县| 大理市| 芜湖市| 沾益县| 盐山县| 连江县| 贵德县| 阳信县| 余庆县| 巍山| 安达市| 天柱县| 深水埗区| 苏州市| 原阳县| 湘潭县| 新疆| 衡阳县| 元谋县| 东安县| 宜城市| 乌兰浩特市| 五河县| 滦平县| 沙田区| 岳阳市| 利辛县| 吴桥县| 阳江市|