从数组中删除的问题

时间:2016-04-25 20:16:45

标签: arrays swift2

我正在尝试检查一个对象(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!)

2 个答案:

答案 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可能更合适。