我希望能够创建一个泛型类型的类,并为泛型是Dictionary的用例做一个扩展。
E。G:
public final class AtomicCollection<WrappedValue> {
}
我希望能够实现字典/数组/集合的所有方法,例如func removeAll()
。
我试着用extension
这样做:
extension AtomicCollection where WrappedValue == Dictionary {
}
问题是,我得到以下错误:
Reference to generic type 'Dictionary' requires arguments in <...>
这将导致我需要提及Key
和Value
用于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
感谢大家的协助!