泛型,value是一个集合



我希望能够创建一个泛型类型的类,并为泛型是Dictionary的用例做一个扩展。

E。G:

public final class AtomicCollection<WrappedValue> {
}

我希望能够实现字典/数组/集合的所有方法,例如func removeAll()

我试着用extension这样做:

extension AtomicCollection where WrappedValue == Dictionary {
}

问题是,我得到以下错误:

Reference to generic type 'Dictionary' requires arguments in <...>

这将导致我需要提及KeyValue用于Dictionary的类型,Element用于Array等。

我希望能够创建一个通用约束所有字典,数组和集合.

任何想法?

关键是你没有要求使用Dictionary。你的标题抓住了你的意图:所有的集合。这就是你想要的:

extension AtomicCollection where WrappedValue: Collection {}

如果您需要能够调用removeAll(),协议是RangeReplaceableCollection(也意味着Collection):

extension AtomicCollection where WrappedValue: RangeReplaceableCollection {}

您只需要选择(或创建)一个协议,该协议具有这组算法所需的方法。这就是协议的全部意义:定义一组算法可以操作的方法。

有相当多的协议与类集合相关。你可以在序列和集合协议中找到它们的概述。

目前您可以通过为扩展中的每个函数指定通用条件来做到这一点,但不能为整个扩展本身指定:

extension AtomicCollection {
func removeAll<T1, T2>() where WrappedValue == Dictionary<T1, T2> {
}
}

这次讨论导致我创建了自己的协议来公开特定的功能,就像@rob-napier提供的那样。

这导致了一个简单的,相当幼稚的解决方案,基于GCD,为Swift中的所有类型的原子性,包括集合。

你可以在这里查看!

https://gitlab.com/yanivhasbanidev/atomics

感谢大家的协助!

相关内容

  • 没有找到相关文章

最新更新