31.10. 不透明类型

  • 不透明类型 定义了遵循某个协议或者合成协议的类型,但不需要指明底层的具体类型。
  • 不透明类型可以作为函数或下标的返回值,亦或是属性的类型使用。
  • 不透明类型不能作为元组类型的一部分或范型类型使用,比如数组元素类型或者可选值的包装类型。

不透明类型的形式如下:some constraint constraint 可以是类类型,协议类型,协议组合类型或者 Any。值只有当它遵循该协议或者组合协议,或者从该类继承的时候,才能作为这个不透明类型的实例使用。和不透明值交互的代码只能使用该值定义在 constraint 上的接口。

协议声明里不能包括不透明类型。类不能使用不透明类型作为非 final 方法的返回值。

使用不透明类型作为返回值的函数必须返回单一公用底层类型。返回的类型可以包含函数范型类型形参的一部分。举个例子,函数 someFunction() 可以返回类型 T 或者 Dictionary 的值。

不透明类型语法

opaque-type

不透明类型some type

下一节:元类型是指任意类型的类型,包括类类型、结构体类型、枚举类型和协议类型。