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?
但他们未能解决:
解决方法
“标题”并不是真正的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 { // ... }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。