gpt4 book ai didi

arrays - Swift 通用数组 Equatable 类型转换

转载 作者:搜寻专家 更新时间:2023-11-01 07:11:54 24 4
gpt4 key购买 nike

我有一个 AAA 类,其中包含一个通用数组。由于 Item 可能不是 Equatable,所以我没有将其编码为 class AAA<Item: Equatable> .

我想在 AAA 类中添加一个删除函数,当 Item 为 Equatable 时该函数可用。通过调用此函数,它将调用 Array Extension 中的一个函数。

由于 Item 默认情况下不是 Equatable,因此以下代码无法编译。

class AAA<Item>
{
var items = [Item]()

func remove(item: Item)
{
items.remove(object: item)
}
}

extension Array where Element: Equatable
{
// Remove first collection element that is equal to the given `object`:
mutating func remove(object: Element)
{
if let index = index(of: object)
{
remove(at: index)
}
}
}

在下一步中,我尝试将 itemsitem 转换为 Equatable。但是,我找不到任何方法来检查 items 数组并将其转换为具有 Equatable 元素的数组。

func remove<ItemEquatable: Item> (item: ItemEquatable) where ItemEquatable: Equatable
{
items.remove(object: item)
}

有什么想法或建议吗?谢谢

最佳答案

只为AAA<Item>定义函数如果Item是平等的,只需将定义放入类的受限扩展中即可:

class AAA<Item> {
var items = [Item]()
}

extension AAA where Item: Equatable {

func remove(item: Item) {
items.remove(object: item)
}
}

你的方法行不通,因为你仍然可以调用 remove任何 AAA<Item> 上的方法实例,没有 Item正在Equatable .

换句话说:你需要限制泛型类型 Item类的类型,而不是 remove() 的参数类型.

关于arrays - Swift 通用数组 Equatable 类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44453874/

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