• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

iOS:枚举时对象相等

[复制链接]
菜鸟教程小白 发表于 2022-12-12 15:24:10 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

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

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

-(NSDictionary *) itemThatContainsKeysid)objectA andid)objectB andid)objectC

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

这是不好的做法吗? 有没有更好的方法可以在不创建数据库的情况下做到这一点?



Best Answer-推荐答案


你可以重写 isEqual 来为你的类型规定相等的概念。与其他语言相同的规则:

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

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

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

AppCode、EqualsBuilder、样板代码

如果有类似 Apache 的 'EqualsBuilder' 类的东西就好了,但与此同时 AppCode为您实现这些方法做得很好。

关于iOS:枚举时对象相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19210232/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap