- Swift提供了两种隐藏值类型细节的方法,不透明类型和装箱类型。返回不透明类型的函数或方法隐藏了返回值的类型,返回值的描述存在于它支持的协议中。不透明类型保留类型标识——编译器可以访问类型信息,但模块的客户端却不能。装箱协议类型可以存储符合给定协议的任何类型的实例。盒装协议类型不保留类型标识。
- 不透明类型:使用some关键字。可以把不透明类型理解为范型的逆过程,范型允许函数或者方法把参数、返回值或者代码内使用的类型抽象出来且不必提前定义,但在运行时是确定的。而不透明类型只要求函数或者方法返回符合某些协议的类型,而不限制返回的类型。
- 不透明类型和范型可以组合使用
- 如果一个函数在多处返回不透明类型,那么所有可能返回值都必须是同一个类型。
- 始终返回单一类型的要求并不妨碍您在不透明的返回类型中使用泛型。
- 装箱类型:在协议名称前写any来定义装箱类型。这种灵活性会有一定的性能开销。
- 不透明类型于装箱类型的差异:不透明类型总是指向一个特定的类型,而装箱类型则可以指向任何满足协议的类型。使用装箱类型作为返回值给予了你返回任何满足协议的类型的灵活性,但是也导致一些操作符(如==)无法使用。