菜鸟教程小白 发表于 2022-12-12 15:24:10

iOS:枚举时对象相等


                                            <p><p>假设我有一个 <code>NSArray</code>,每个项目都是一个 <code>NSDictionary</code>,其中包含三个键 keyA、keyB 和 keyC - 每个都引用未知类型的对象 <code>( id)</code>.</p>

<p>如果我想编写一个方法,用这三个键找到给定元素,即</p>

<pre><code>-(NSDictionary *) itemThatContainsKeys:(id)objectA and:(id)objectB and:(id)objectC
</code></pre>

<p>如果通过 <code>if(</code>) 等简单地枚举和测试对象相等性,我会遇到麻烦吗?我将传入在字典初始化中设置的实际对象 - 即不是具有相同值但位置不同的字符串。</p>

<p>这是不好的做法吗?
有没有更好的方法可以在不创建数据库的情况下做到这一点? </p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>你可以重写 isEqual 来为你的类型规定相等的概念。与其他语言相同的规则:</p>

<ul>
<li>如果你提供了 equals 的实现,你应该提供 'hash' 的实现</li>
<li>“相等”的对象应该具有相同的“哈希”</li>
<li>Equals 应该是可传递的 -> 如果 A 等于 B,B 等于 C,则 C 必须等于 A。</li>
<li>Equals 应该是双向的 -> 如果 A 等于 B,则 B 必须等于 A。</li>
</ul>

<p>这将确保 NSSet 等类中的可预测行为,这些类使用哈希来提高性能,在发生冲突时回退到 equals。 </p>

<p>正如 Jason Whitehorn 所指出的,Objective-C 也有提供另一个 isEqualToMyType 方法以方便使用的约定。 </p>

<p><strong>AppCode、EqualsBuilder、样板代码</strong></p>

<p>如果有类似 Apache 的 'EqualsBuilder' 类的东西就好了,但与此同时 <a href="http://www.jetbrains.com/objc/" rel="noreferrer noopener nofollow">AppCode</a>为您实现这些方法做得很好。 </p></p>
                                   
                                                <p style="font-size: 20px;">关于iOS:枚举时对象相等,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/19210232/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/19210232/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: iOS:枚举时对象相等