gpt4 book ai didi

swift - 我如何定义 CollectionType 的扩展,以便它的方法可用于字典?

转载 作者:搜寻专家 更新时间:2023-10-30 23:15:28 27 4
gpt4 key购买 nike

我最近能够更改扩展名:

extension Array where Element: Encodable { ... }

到:

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

为了以后能够在不同的扩展中使用 CollectionTypeEncodable 应用类型约束。

现在我尝试用 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 询问 – 我宁愿不必这样做并保留对 ArrayDictionary 的扩展。

但是,我还需要为 Optional 变体编写扩展。我的理解是,由于它们使用泛型,不可能为 Optional 编写类型约束,将其限制为 ArrayDictionary

最佳答案

这适用于我当前的用例:

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

关于swift - 我如何定义 CollectionType 的扩展,以便它的方法可用于字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31956520/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com