I'm running this code
if(left.comboOptions.count != right.comboOptions.count) {
for index in 0...left.comboOptions.count-1 {
print(left.comboOptions[index].selectedComboOptionDishes == right.comboOptions[index].selectedComboOptionDishes)
print(left.comboOptions[index].selectedComboOptionDishes)
print("vs")
print(right.comboOptions[index].selectedComboOptionDishes)
print()
}
}
And the output I got was
Comparing comboOptionDish
1x Black Beans Wrap(277) vs 1x Black Beans Wrap(277)
Both are equal
true
[1x Black Beans Wrap(277)]
vs
[1x Black Beans Wrap(277)]
false
[1x Fresh Lemon Juice(292)]
vs
[1x Fresh Lemon Juice(292)]
true
[]
vs
[]
Why is == on Set() returning
false
on index 1 (second one here)?? and Why is==
block not executed forFresh Lemon Juice
??? What am I doing wrong? Or the way == operates on Set() differs specifically?
and my ComboOptionDish class is
class ComboOptionDish: Equatable, Hashable, CustomStringConvertible {
var id: Int!
var quantity: Int = 0
var dish: Dish! /*Contains name, id and price and nothing else*/
var description: String {
return String(quantity) + "x " + dish.name + "(" + String(id) + ")"
}
var hashValue: Int {
return self.id * self.quantity
}
}
func == (left: ComboOptionDish, right: ComboOptionDish) -> Bool {
print("Comparing comboOptionDish")
print(String(left) + " vs " + String(right))
if left.id != right.id { print("IDs not equal\n"); return false }
if left.quantity != right.quantity { print("Quantity not equal\n"); return false }
print("Both are equal")
print()
return true
}
My ComboOption class is
class ComboOption: Mappable, Equatable {
var id: Int!
var name: String!
var selectedComboOptionDishes: Set<ComboOptionDish> = Set()
var comboOptionDishes: ComboOptionDish = []
}
EDIT: How I fill data?
- I fill in data using JSON using ObjectMapper.
- I have many
ComboOption
s each containing manyComboOptionDish
es. - Then I make user choose
ComboOptionDish
es, which I add toselectedComboOptionDishes
which is aSet()
ofComboOptionDish
es inside the correspondingComboOption
- And then I now need to compare if two
ComboOption
s are equal, so I need to override==
forComboOption