Swift AnyHashable作为AnyEqualable的替代品
我需要比较符合协议Swift AnyHashable作为AnyEqualable的替代品,swift,type-erasure,Swift,Type Erasure,我需要比较符合协议p的结构数组 p不能符合equalable,因为它不能有“自我要求” 为此,创建类型擦除是一种常见做法。 但是,AnyHashable已经是标准库的一部分,它符合equalable 我想知道anyequalable是否有充分的理由不是标准库的一部分。 是否应该使用标准的AnyHashable而不是anyequalable?总结了一系列常见的功能。anyequalable没有;它的功能可以用一个闭包来表示 let cupcake=“谢谢,但这并不能解释为什么不在自定义类型擦除(可
p
的结构数组
p
不能符合equalable,因为它不能有“自我要求”
为此,创建类型擦除是一种常见做法。
但是,
AnyHashable
已经是标准库的一部分,它符合equalable
我想知道anyequalable
是否有充分的理由不是标准库的一部分。
是否应该使用标准的AnyHashable
而不是anyequalable
?总结了一系列常见的功能。anyequalable
没有;它的功能可以用一个闭包来表示
let cupcake=“谢谢,但这并不能解释为什么不在自定义类型擦除(可能更具体)上使用AnyHashable,如anyequalable(或您建议的另一种风格)您是否认为您的建议比使用任何可hhasable的更简单/更好/更容易?还有,为什么不可等价的不是标准库的一部分?我是说没有使用案例;<代码> GETISOALS 可能比需要的要多。但是如果您有一个,请显示用例!<代码>,因为存在与它们相关的属性和方法。我是说,对于归结为运算符的类型来说,不值得拥有它。我认为您只是在查看AnyHashable
,因为它已经存在,而不是因为它几乎像您实际想要的那样封装起来。AnyHashable
也由编译器优化。避免将其包装在盒子中有点神奇。据我所知,它主要用于NSDictionary-to-Dictionary桥接。如果您发现您需要很多与桥接到Cocoa无关的任何Equalable或任何Hashable,您可能误用了IMO类型系统。一般来说,您不应该让协议要求Equalable;您应该如有必要,添加自定义.isEqual
要求。我将在37:44左右讨论此问题: