gpt4 book ai didi

swift - 如何比较 Swift 中的泛型对象?

转载 作者:搜寻专家 更新时间:2023-11-01 05:37:36 25 4
gpt4 key购买 nike

考虑以下简化的片段:

class Foo<T: Equatable> {
var x: T
init(_ x: T, _ y: T) {
self.x = x
if (x == y) {
// do something
}
}
}

我希望这个类适用于在某种程度上具有可比性的所有类型的 T。理想情况下,如果 T 是一个对象,它会比较身份,并直接比较符合 Equatable 的所有其他内容。
例如,上面的代码不适用于 Array。如果我将 Equatable 更改为 AnyObject 并将 == 更改为 === 那么它不适用于 Ints。我该如何解决这个问题?我考虑过创建自己的协议(protocol),但后来我想不出如何为所有符合 Equatable 的类型实现它。

编辑:
我不知道它会在 Mac 上运行,因为我在 Linux 上并且当我尝试编译时

Foo<[Int]>([1, 2], [1, 2])

我收到以下错误:

error: type '[Int]' does not conform to protocol 'Equatable'
Foo<[Int]>([1, 2], [1, 2])
^

最佳答案

一个简单的解决方案是简单地为 Equatable 元素的数组添加另一个初始化程序。

class Foo<T: Equatable> {
init(_ x: T, _ y: T) {
if (x == y) {
print("Initialization by equal equatable types.")
}
}

init(_ x: [T], _ y: [T]) {
if (x == y) {
print("Initialization by equal arrays of equatable types.")
}
}
}

let a = Foo<Int>(1, 1)
/* Initialization by equal equatable types. */
let b = Foo<Int>([1, 2, 3], [1, 2, 3])
/* Initialization by equal arrays of equatable types. */

关于swift - 如何比较 Swift 中的泛型对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35038178/

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