Generics 在Swift中扩展所有类型?

Generics 在Swift中扩展所有类型?,generics,swift,Generics,Swift,浏览Swift的库代码,我发现: extension T! : Printable { var description: String { get } } 该代码段似乎使用“description”字段扩展了所有类型。 当我尝试在代码中执行相同的操作时,会出现错误: 示例.swift:10:11:非标称类型“T!”无法扩展 以下是类似的问题: 但它们未能解决: 这是怎么回事?为什么库代码可以,但我的代码。。。不是吗 是否可以对所有类型或符合特定协议的所有类型进行测试 首先,它并不

浏览Swift的库代码,我发现:

extension T! : Printable {
  var description: String { get }
}
该代码段似乎使用“description”字段扩展了所有类型。 当我尝试在代码中执行相同的操作时,会出现错误:

示例.swift:10:11:非标称类型“T!”无法扩展

以下是类似的问题:

但它们未能解决:

  • 这是怎么回事?为什么库代码可以,但我的代码。。。不是吗
  • 是否可以对所有类型或符合特定协议的所有类型进行测试

首先,它并不扩展所有类型。它扩展了
T
,这是隐式的。因此,它扩展了隐式展开的可选类型,而不是所有类型

“标题”不是真正的Swift代码;它是自动生成的。在某些情况下,自动头生成器中可能存在错误,使其无法生成真正的Swift代码。不要太直截了当

在自动生成的“header”中,您注意到一件奇怪的事情,即某些内置语法收缩的应用不一致——类型声明不使用收缩,但扩展使用:

struct Array<T>
extension T[]

enum Optional<T>
extension T?

struct ImplicitlyUnwrappedOptional<T>
extension T!

这正是中显示的问题。

这里有类似的问题(没有公认的答案:。可能有,Swift开发人员自己保留一些功能。你说得对!我想知道为什么库代码可以工作,但我的代码无法编译。
struct Array<T>
extension T[]

enum Optional<T>
extension T?

struct ImplicitlyUnwrappedOptional<T>
extension T!
extension ImplicitlyUnwrappedOptional : MyProtocol {
  // ...
}