微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

swift – 如何定义CollectionType的扩展名以使其方法可用于词典?

我最近能够从以下位置更改扩展名:
extension Array where Element: encodable { ... }

至:

extension CollectionType where Generator.Element: encodable { ... }

以便以后能够在不同的扩展中应用CollectionType和encodable的类型约束.

现在我正在尝试用Dictionary做同样的事情,改变:

extension Dictionary where Key: StringLiteralConvertible,Value: encodable { ... }

至:

extension CollectionType where Generator.Element == (Key: StringLiteralConvertible,Value: encodable) { ... }

但是,后者似乎不是Dictionary类型的有效替代,因为现在扩展中定义的方法不能在字典上调用.

如何定义CollectionType(或者SequenceType)的扩展名,以便其方法可用于词典?

更新

我想要注意,我已尝试添加类型约束,如下所示,但没有成功:

extension CollectionType where Self: protocol<Indexable,SequenceType,DictionaryLiteralConvertible>,Self.Key: protocol<Hashable,StringLiteralConvertible>,Self.Value: encodable,Self.Generator.Element == (Key: StringLiteralConvertible,Value: encodable) { ... }

更新2

因为user2194039问 – 我不想这样做,并保持对数组和字典的扩展.

但是,我还需要为Optional变体编写扩展.我的理解是,由于它们使用了泛型,因此不可能为Optional编写一个类型约束,将其约束为Array或Dictionary.

这适用于我目前的用例:
extension CollectionType where Self: DictionaryLiteralConvertible,Self.Key: StringLiteralConvertible,Generator.Element == (Self.Key,Self.Value) { ... }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐