You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift中无需新增类型实现Box<Void>的Equatable兼容方案探讨

解决Box无法获得Equatable一致性的替代方案

嘿,这个问题我之前也碰到过,其实不用额外定义新的Empty类型也能搞定,给你两个实用的方案:

方案1:给Void扩展Equatable协议

既然问题根源是Void没遵循Equatable,那直接给它补上这个协议一致性就好了。因为Void本质就是空元组(),只有唯一的实例,所以==操作符逻辑非常简单:

extension Void: Equatable {
    public static func == (lhs: Void, rhs: Void) -> Bool {
        // Void只有一个可能的值,必然相等
        return true
    }
}

这样你的原代码extension Box: Equatable where T: Equatable { }就能自动适配Box<Void>了,完全不需要修改Box的现有逻辑,一劳永逸。

方案2:给Box<Void>单独实现Equatable

如果你不想全局修改Void的协议一致性(担心影响其他代码),可以专门针对Box<Void>做特化扩展:

extension Box where T == Void {
    static func == (lhs: Box<Void>, rhs: Box<Void>) -> Bool {
        // 存储的Void没有任何内容,两个Box<Void>天然相等
        return true
    }
}

这个方案更聚焦,只让Box<Void>具备Equatable特性,不会对全局的Void类型造成影响。

这两个方案都能满足你的需求,具体选哪个取决于你是否愿意全局扩展Void的协议支持~

内容的提问来源于stack exchange,提问作者pshah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:37:51