Swift词典不起作用

时间:2015-01-05 10:01:40

标签: swift dictionary

我在Swift的字典中遇到一个很大的问题。我有一些自定义类:团队竞争统计团队竞争符合协议 Hashable Equatable

字典看起来像这样: [Team: [Competition: Statistics]]

此外,我有两个"整体价值观":团队竞争

当我执行以下操作时: println(dictionary[overallTeam]!)

它打印竞赛的内存地址和您期望的统计数据。但是,当我执行以下操作时: println(dictionary[overallTeam]![overallCompetition])

我得nil作为输出。我完全不知道这一点,因为dictionary[overallTeam]!中只有一个键与overallCompetition同名。这意味着等号#{1}}返回 true ,并且hashValue相同。

请帮忙,问题出在哪里。

以下是代码:

==方法中,我执行以下操作:

init()

打印代码是在启动应用程序时调用的方法:

dictionary = [Team: [Competition: Statistics]]()
dictionary[overallTeam] = [Competition: Statistics]()
dictionary[overallTeam]![overallCompetition] = Statistics()

只是一个普遍的问题:字典键是基于hashValue的,不是吗?那么为什么使用相同的 hashValue做两个键不会产生相同的结果???

1 个答案:

答案 0 :(得分:-1)

您无法将字符串与不同的对象类型进行比较并获得一致的结果,因为该关系不具有反身性。换句话说,虽然你可能已经实现了Equatable来说你的对象==字符串,但是不是因为string == object,这会破坏它。

由于您是按字符串名称索引数组,因此您永远不会使用overallCompetition找到它。存储带有overallCompetition的第二个字典作为值,或使用overallCompetition.name来提取值。