我已经看到一些使用约束的代码,<T: Any>并且无法找到文档之间的差异而不指定约束.是否存在任何差异,例如限制非选项?
约束确实是多余的,因为所有类型都是Any(包括Optional)的子类型.
在内部,编译器实际上将类型建模为由零协议组成的Any协议组合类型
(例如P1 & P2).没有办法在语言中拼写这个,这就是为什么标准库中没有定义的原因1,它只是一个被解析为类型的关键字.Any
因此,约束T : Any在字面上被解释为" T必须符合这个空协议列表中的所有协议",这显然是一个冗余约束.真的,编译器应该对它发出警告(我实际上已经开始研究这样做的补丁 - 本周某个时候打开拉取请求一切顺利).
1. 当协议组成拼写而不是拼写时Any,过去在标准库中定义为typealiasfor .protocol<>protocol<P1, P2>P1 & P2
| 归档时间: |
|
| 查看次数: |
108 次 |
| 最近记录: |