I'm trying to check whether an object (order of type Order) already exists in an array (newOrderItems - array of Order) before appending it so that I avoid duplicates.
Array declaration:
var newOrderItems = [Order]()
Attempting to delete if exists before appending:
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!)
The above gives 2 errors:
****** Error 1 ******
Binary operator '==' cannot be applied to operands of type 'Order' and 'Order?'
in line:
if newOrderItems.filter({ $0 == order }).count > 0
****** Error 2 ******
Cannot convert value of type 'Order?' to expected argument type '@noescape (Order) throws -> Bool'
in line:
newOrderItems.removeAtIndex(newOrderItems.indexOf(order))
What am I missing here?
****** EDIT ******
I can get it to work if I rewrite it using a loop:
var counter = 0
for item in newOrderItems {
if item.id == order?.id {
newOrderItems.removeAtIndex(counter)
break
}
counter++
}
newOrderItems.append(order!)