gpt4 book ai didi

swift - 如何为通用 Result 类型定义相等性?

转载 作者:搜寻专家 更新时间:2023-10-31 22:40:36 26 4
gpt4 key购买 nike

我有一个普通的 Result输入:

public enum Result<T> {
case success(T)
case error
}

我想制作类型 Equatable ,很简单:

public enum Result<T: Equatable>: Equatable {

case success(T)
case error

// definition of ==
}

但是我想使用 Result<Void> ,这是一个类型错误,因为 Void不符合 Equatable .有没有办法定义 Result符合 Equatable 的类型, 接受 Result<Void>并且仍然对 T: Equatable 使用正确的相等性检查?这对 Void 没有意义吗?实现Equatable

最佳答案

我认为目前还不可能。 Void 是空元组 (),并且元组不能采用协议(protocol)(关于该主题从 [swift-evolution] Synthesizing Equatable, Hashable, and Comparable for tuple types 开始).

一种可能的解决方法(如上面@Hamish 所建议的)是使用自定义输入而不是 Void:

struct Unit: Equatable {
static var unit = Unit()
public static func ==(lhs: Unit, rhs: Unit) -> Bool {
return true
}
}

let res = Result.success(Unit.unit)

我最初想过一次 SE-0143 Conditional conformances实现然后可以定义

public enum Result<T> {
case success(T)
case error
}

public extension Result: Equatable where T: Equatable {
public static func ==(lhs: Result, rhs: Result) -> Bool {
// ...
}
}

public extension Result: Equatable where T == Void {
public static func ==(lhs: Result, rhs: Result) -> Bool {
return true
}
}

无需使 Void 本身 Equatable

但是(再次归因于@Hamish)这行不通因为不允许多重一致性。

关于swift - 如何为通用 Result<T> 类型定义相等性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47606575/

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