gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 02:15:15 31 4
gpt4 key购买 nike

我确实需要将任何等同的结构/类型/对象传递给此 setEquatable 函数。知道如何解决这个问题吗? enter image description here

public func ==(l: [String: String], r: [String: String]) -> Bool {
return true // just a stub
}

func setEquatable<T: Equatable>(v: T) {
//...
}

let isEqual = ["1": "2"] == ["1": "2"]
setEquatable(v: ["1": "2"])

对于因重复问题而投票赞成关闭问题的人:我不会将问题作为重复问题关闭,因为这样您就不会阻止将来再次提出相同的问题。代码有问题并想了解要点的人会发现这个问题非常有用。他们很可能对条件一致性一无所知,但他们的代码无法编译。

最佳答案

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

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

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

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

不过,在实现此类型系统升级之前,不幸的是,没有办法直接将任何 Dictionary 视为 Equatable。但是,您可以围绕字典创建符合 Equatable 的包装器类型,或者重载您的 setEquatable 函数以也接受具有 Equatable 值的字典并进行相应处理。

关于Swift:equatable 字典不能传递给泛型函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39275507/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com