gpt4 book ai didi

Swift - 实现平等?

转载 作者:搜寻专家 更新时间:2023-11-01 06:48:53 26 4
gpt4 key购买 nike

我有以下我想要 Equatable 的类(class)。一切正常,除了操作符似乎完全覆盖了全局 == 操作符。

// User.swift
class User: Equatable {
let id: Int

init(_ id: Int) {
self.id = id
}
}

func == (lhs: User, rhs: User) -> Bool {
return (lhs.id == rhs.id)
}

当我尝试使用 == 时,它似乎在代码的其他地方提示“T 不可转换为 User”。但这是一个完全不同的类,与用户无关

// ArrayExtension.swift
extension Array {

public func contains(object: T) -> Bool {
for x in self {
// Compile error here "T is not convertible to User"
if (x == object) {
return true
}
}

return false
}
}

代码有什么问题

最佳答案

问题是 Array 中的 T 不一定是 Equatable。因此,您不能在扩展中使用 ==

你得到这个错误的原因是编译器正在尽最大努力找到一个可以使用的函数,叫做 ==。它恰好找到了您的 == 函数,但它给出了一个错误,因为它实际上与类型不匹配。

注意:编译器显然可以通过其错误消息传递一些可用性工作

关于Swift - 实现平等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25235204/

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