Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift AnyHashable作为AnyEqualable的替代品_Swift_Type Erasure - Fatal编程技术网

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左右讨论此问题: