在Swift 3及以后版本中声明/实现的'Any'在哪里?

时间:2017-07-26 10:28:11

标签: swift

Any作为标准协议(Swift 2.2)到......?

在Swift 3.0之前,Any被描述为“所有类型隐式符合的协议。”,并在标准库中实现为a typealias for protocol<>

typealias Any = protocol<>
     

所有类型都隐式符合的协议。

从Swift 3.0开始,它的用法和含义似乎没有变化,但我再也找不到 - 在Swift中流畅变化的语言参考 - 任何明确的参考。

  • 在Swift 3.0中,Any在哪里声明/实现,以及在哪里记录?

1 个答案:

答案 0 :(得分:1)

Any已从标准库中删除,现在是关键字/内置类型

在实施Swift演化提案时

对于Swift 3,Any已从Swift标准库中删除,并成为关键字/内置类型。它的含义和行为保持不变。

引用上述进化建议:

  

现有的Any typealias,代表符合的所有类型   对于零个或多个协议(即所有类型),将成为关键字。   它的意义不会改变。

引用CHANGELOG.md的{​​{1}}中的更新:

  

以前定义了空协议组合Any类型   正如protocol<>这已从标准中删除   库和Any现在是具有相同行为的关键字

the commit associated with removing the Any typealias from the Standard Library中,我们可以发现从标准库迁移Any并将其更改为内置关键字的更改。

  

[SE-0095]“&”组合语法的初始解析实现   此提交定义了“Any”关键字,实现了解析   使用中缀“&”编写类型,并提供要转换的修订   “protocol<>

     

...

     

<强> include/swift/AST/ASTContext.h:

  // Builtin type and simple types that are used frequently.
  ...
+ const CanType TheAnyType; /// This is 'Any', the empty protocol composition
     

<强> include/swift/AST/KnownIdentifiers.def:

  ...
  IDENTIFIER(Self)
+ IDENTIFIER(Any)

此关键字现在在哪里记录?

除了描述此迁移的各种更改日志之外,现在可以在another prior commit related to implementing SE-0095中找到Any作为关键字的文档:

  

关键字和标点符号

     

...

     
      
  • 表达式和类型中使用的关键字:as Any catch,...
  •   

同样,巧妙地,在the Language Reference - Lexical Structure的主要语法描述中:

  

类型语法

     

...

     

type - &gt;元类型型

     

类型 - &gt; Any

     

类型 - &gt; Self

     

...

最后,和以前一样,(虽然现在是关键字/非stdlib类型)Any仍被简单地描述为可用于表示任何类型的特殊类型。引用the Language Reference - Types

  

AnyAnyObject

输入类型      

Swift提供了两种特殊类型来处理非特定类型:

     
      
  • Any可以表示任何类型的实例,包括函数   类型。
  •   
     

...