[英]Swift Generic array Equatable casting
我有一个包含通用数组的AAA类。 由于Item可能不是Equatable,所以我不将其编码为class AAA<Item: Equatable>
。
我想在AAA类中添加一个remove函数,当Item为Equatable时可用。 通过调用此函数,它将在数组扩展中调用一个函数。
由于默认情况下Item不等于,因此以下代码无法编译。
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)
}
}
}
在下一步中,我尝试将项目和项目转换为Equatable。 但是,我找不到任何方法来检查并将项目数组转换为具有Equatable元素的数组。
func remove<ItemEquatable: Item> (item: ItemEquatable) where ItemEquatable: Equatable
{
items.remove(object: item)
}
有什么想法或建议吗? 谢谢
若要仅在Item
是可等于的情况下为AAA<Item>
定义函数,只需将定义放入类的受限扩展中:
class AAA<Item> {
var items = [Item]()
}
extension AAA where Item: Equatable {
func remove(item: Item) {
items.remove(object: item)
}
}
您的方法行不通,因为您仍然可以在任何AAA<Item>
实例上调用remove方法,而Item
不能为Equatable
。
换句话说:您需要限制类的通用类型Item
,而不是remove()
的参数类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.