Swift:equatable字典不能传递给泛型函数

时间:2016-09-01 15:25:11

标签: swift generics

我真的需要将任何equatable结构/类型/对象传递给此SELECT * FROM [LinhaRI] LR WHERE IDdocumento IN ( SELECT st.design COLLATE Latin1_General_CI_AS FROM [admnappl001].[cebi1].[dbo].[st] st WHERE st.ststamp = LR.STstamp_Artigo ); 函数。 不知道怎样才能解决这个问题? enter image description here

setEquatable

对于因复制而投票结束问题的人:我不会将问题视为重复,因为这样您就不会阻止将来再次询问相同的问题。那些对代码有疑问并想要理解要点的人会发现这个问题非常有用。他们很可能对条件一致性一无所知,但是他们的代码不能编译。

1 个答案:

答案 0 :(得分:1)

目前这是Swift的类型系统的一个限制,这个系统是众所周知的,并且在修复的路线图上。正在讨论解决此问题的具体功能是对通用类型协议的“条件一致性”。从本质上讲,Dictionary类型不能被普遍声明为Equatable,因为你不知道如何比较它可能拥有的每种可能的值类型(其中一些可能本身不是Equatable)。

条件一致性允许您创建一个扩展,表示Dictionary 有时符合Equatable,特别是在条件时,其Value类型为Equatable。在这种情况下,字典相等可以定义为一个函数,用于比较所有键的相等性以及正在检查的两个字典实例中的所有值。

以下是此功能的摘要以及正在考虑的其他功能:

https://github.com/apple/swift/blob/master/docs/GenericsManifesto.md#conditional-conformances-

直到实现这种类型的系统升级,遗憾的是没有办法将任何Dictionary直接视为Equatable。但是,您可以在Dictionaries周围创建符合Equatable的包装器类型,或者重载您的setEquatable函数以接受具有Equatable值的Dictionaries并相应地处理。