ios - == 究竟如何与 Set() 一起工作 - Swift
<p><p>我正在运行这段代码</p>
<pre><code>if(left.comboOptions.count != right.comboOptions.count) {
for index in 0...left.comboOptions.count-1{
print(left.comboOptions.selectedComboOptionDishes == right.comboOptions.selectedComboOptionDishes)
print(left.comboOptions.selectedComboOptionDishes)
print("vs")
print(right.comboOptions.selectedComboOptionDishes)
print()
}
}
</code></pre>
<p>我得到的输出是</p>
<pre><code>Comparing comboOptionDish
1x Black Beans Wrap(277) vs 1x Black Beans Wrap(277)
Both are equal
true
vs
false
vs
true
[]
vs
[]
</code></pre>
<blockquote>
<p><strong>Why is == on Set() returning <code>false</code> on index 1 (second one here)?? and Why is <code>==</code> block not executed for <code>Fresh Lemon Juice</code>???</strong>
What am I doing wrong? Or the way == operates on Set() differs specifically?</p>
</blockquote>
<p>我的 ComboOptionDish 类是</p>
<pre><code>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
}
</code></pre>
<p>我的 ComboOption 类是</p>
<pre><code>class ComboOption: Mappable, Equatable {
var id: Int!
var name: String!
var selectedComboOptionDishes: Set<ComboOptionDish> = Set()
var comboOptionDishes: ComboOptionDish = []
}
</code></pre>
<p>编辑:我如何填充数据?</p>
<ul>
<li>我使用 ObjectMapper 使用 JSON 填充数据。 </li>
<li>我有许多 <code>ComboOption</code>,每个都包含许多 <code>ComboOptionDish</code>es。</li>
<li>然后我让用户选择 <code>ComboOptionDish</code>es,我将其添加到 <code>selectedComboOptionDishes</code> 这是 <code>ComboOptionDish</code> 的 <code>Set()</code> code>es 里面对应的<code>ComboOption</code></li>
<li>然后我现在需要比较两个 <code>ComboOption</code> 是否相等,所以我需要为 <code>ComboOption</code></li 覆盖 <code>==</code> >
</ul></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>我无法重现您的问题,但我相信这是平等过载的错误。有一个类似的话题<a href="https://stackoverflow.com/questions/31099379/bug-with-equals-operator-and-nsobjects-in-swift-2-0" rel="noreferrer noopener nofollow">here</a> .</p>
<p>解决方法是让 <code>ComboOptionDish</code> 子类 <code>NSObject</code> 并使用 <code>isEqual</code> 。</p>
<pre><code>class ComboOptionDish: NSObject {
override var description: String {
//...
}
override var hash: Int {
//...
}
override func isEqual(object: AnyObject?) -> Bool {
if let other = object as? ComboOptionDish {
return self.id == other.id && self.quantity == other.quantity
} else {
return false
}
}
}
</code></pre></p>
<p style="font-size: 20px;">关于ios - == 究竟如何与 Set() 一起工作 - Swift,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/37908994/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/37908994/
</a>
</p>
页:
[1]