我正在尝试检查一个对象(Order类型的顺序)是否已经存在于数组(newOrderItems - Order数组)中,然后才附加它以避免重复。
数组声明:
var newOrderItems = [Order]()
在追加之前尝试删除是否存在:
let order = Order(item: item!.name, price: item!.price, quantity: 1, status: "", tags: "", selectedTags: item!.selectedTags, id: item!.id)
if newOrderItems.filter({ $0 == order }).count > 0 {
newOrderItems.removeAtIndex(newOrderItems.indexOf(order))
}
newOrderItems.append(order!)
上面给出了2个错误:
******错误1 ******
二元运算符'=='不能应用于'Order'和'Order?'类型的操作数
排队:
if newOrderItems.filter({ $0 == order }).count > 0
******错误2 ******
无法转换“订单”类型的值?预期参数类型'@noescape(Order)throws - >布尔“
排队:
newOrderItems.removeAtIndex(newOrderItems.indexOf(order))
我在这里缺少什么?
******编辑******
如果我使用循环重写它,我可以使它工作:
var counter = 0
for item in newOrderItems {
if item.id == order?.id {
newOrderItems.removeAtIndex(counter)
break
}
counter++
}
newOrderItems.append(order!)
答案 0 :(得分:1)
简单解决您的问题。只替换你的
如果newOrderItems.filter({$ 0 == order})。count> 0
带
如果newOrderItems.filter({$ 0.id == order.id})。count> 0
谢谢;]
答案 1 :(得分:0)
比较filter
中的比较代码:
if newOrderItems.filter({ $0 == order }).count > 0 { ... }
在while
循环中使用它:
if item.id == order?.id { ... }
Swift不知道如何比较Order
类型的2个对象,但它知道如何比较2 Ints
(假设id
类型为Int
)
为==
定义Order
函数:
func ==(lhs: Order, rhs: Order) -> Bool {
return lhs.id == rhs.id
}
然后你应该可以使用filter
if newOrderItems.filter({ $0 == order }).count > 0 {
newOrderItems.removeAtIndex(newOrderItems.indexOf(order))
}
但是,如果您希望OrderID是唯一的,Dictionary
可能更合适。