泛型 – 扩展Swift中的所有类型?

泛型 – 扩展Swift中的所有类型?,第1张

概述浏览 Swift的库代码我发现: extension T! : Printable { var description: String { get }} 该代码段似乎使用“description”字段扩展了所有类型. 当我尝试在我的代码中执行相同的 *** 作时,我收到错误: example.swift:10:11: Non-nominal type ‘T!’ cannot be extended 浏览 Swift的库代码我发现:

extension T! : Printable {  var description: String { get }}

该代码段似乎使用“description”字段扩展了所有类型.
当我尝试在我的代码中执行相同的 *** 作时,我收到错误:

example.swift:10:11: Non-nominal type ‘T!’ cannot be extended

protocol MyProtocol {  // ...}extension T! : MyProtocol { // error: Non-nominal...  // ...}

有类似的问题:

> How can I extend typed Arrays in Swift?
> What’s the difference between Optional<T> and optional types in Swift? Extending Optional to carry error information?

但他们未能解决:

>这里发生了什么?为什么库代码没问题,但我的代码……不是吗?
>是否可以使用符合特定协议的所有类型或所有类型?

解决方法 首先,它并没有扩展所有类型.它扩展了T!,它是ImplicitlyUnwrappedOptional< T>.因此它扩展了隐式展开的可选类型,而不是所有类型.

“标题”并不是真正的Swift代码;它是自动生成的.自动头生成器中可能存在错误,这使得在某些情况下不会生成真正的Swift代码.不要太过于字面意思.

您在自动生成的“标题”中注意到的一个奇怪的事情是某些内置语法收缩不一致地应用 – 类型声明不使用收缩,但扩展包括:

struct Array<T>extension T[]enum Optional<T>extension T?struct ImplicitlyUnwrappedOptional<T>extension T!

自动标题生成器中的某些代码可能过于贪婪地用它们的缩小语法替换上述类型.所以首先我们假装扩展T!实际上是说扩展ImplicitlyUnwrappedOptional< T>.

然而,扩展ImplicitlyUnwrappedOptional< T>也没有编译,错误“使用未声明的类型’T’”.事实上,在自动生成的“标题”中,我们有许多带有类型参数的扩展声明实例,例如:扩展词典< KeyType,ValueType>,不在Swift中编译.这是自动标题生成的另一个错误.

但删除type参数有效:

extension ImplicitlyUnwrappedOptional : MyProtocol {  // ...}

这正是070​​00中显示的内容.

总结

以上是内存溢出为你收集整理的泛型 – 扩展Swift中的所有类型?全部内容,希望文章能够帮你解决泛型 – 扩展Swift中的所有类型?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1004483.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存