我希望能够创建一个泛型类型的类,并为泛型是Dictionary的用例做一个扩展。
例如:
public final class AtomicCollection<WrappedValue> {
}
我希望能够实现Dictionary/Array/Set的所有方法,例如func removeAll()
。
我试着用extension
这样做:
extension AtomicCollection where WrappedValue == Dictionary {
}
问题是,我得到以下错误:Reference to generic type 'Dictionary' requires arguments in <...>
这将导致这样一个事实,即我需要提到的类型,其中Key
和Value
是为Dictionary
,Element
是为Array
等。
我希望能够为ALL Dictionaries,Arrays and Sets创建通用约束。
你知道吗?
3条答案
按热度按时间zbq4xfa01#
关键是你不是在问字典。你的标题抓住了你的意图:所有集合。这就是你想要的:
如果你需要能够调用
removeAll()
,协议是RangeReplaceableCollection(这也意味着Collection):你只需要选择(或创建)一个协议,它包含了你需要的这组算法的方法。这就是协议的全部意义:来定义一组算法可以操作的方法。
有很多与集合类相关的协议。你可以在Sequence and Collection Protocols中找到它们的概述。
9fkzdhlc2#
目前,您可以通过为扩展中的每个函数指定通用条件来实现这一点,但不能为整个扩展本身指定通用条件:
oxalkeyp3#
这次讨论导致我创建了自己的协议来公开特定的功能,正如@rob-napier所提供的那样。
这导致了一个简单而幼稚的解决方案,基于GCD,在Swift中为每一种类型(包括集合)提供原子性。
你可以在这里查看!
https://gitlab.com/yanivhasbanidev/atomics
感谢大家对以上内容的支持!