字典键要求Hashable
符合性:
class Test {}
var dictionary = [Test: String]() // Type 'Test' dies not conform to protocol 'Hashable'
class Test: NSObject {}
var dictionary = [Test: String]() // Works
如何获得纯Swift类实例的地址用作hashValue
?
可以将相等实现为对象标识,即a == b
iff
a
并b
引用该类的相同实例,并且可以从构造哈希值ObjectIdentifier
(对于相同的对象,该值相同,请比较,例如,使用ObjectIdentifier()和’===’运算子
对于Swift 4.2及更高版本:
class Test : Hashable {
static func ==(lhs: Test, rhs: Test) -> Bool {
return lhs === rhs
}
public func hash(into hasher: inout Hasher) {
hasher.combine(ObjectIdentifier(self))
}
}
对于Swift 3:
class Test : Hashable {
var hashValue: Int { return ObjectIdentifier(self).hashValue }
}
func ==(lhs: Test, rhs: Test) -> Bool {
return lhs === rhs
}
对于Swift 2.3及更早版本,您可以使用
/// Return an UnsafePointer to the storage used for `object`. There's
/// not much you can do with this other than use it to identify the
/// object
func unsafeAddressOf(object: AnyObject) -> UnsafePointer<Void>
即
class Test : Hashable {
var hashValue: Int { return unsafeAddressOf(self).hashValue }
}
func ==(lhs: Test, rhs: Test) -> Bool {
return lhs === rhs
}
例:
var dictionary = [Test: String]()
let a = Test()
let b = Test()
dictionary[a] = "A"
print(dictionary[a]) // Optional("A")
print(dictionary[b]) // nil
实施Equatable
协议。
问题内容: 尝试使用字典中的键快速填充字符串。 这将返回错误:’AnyObject’与字符串不同 也试过了 但得到:’String’不能转换为[String] 问题答案: Swift 3和Swift 4
问题内容: 我有以下快速字典 我如何访问数组值? 上面的代码给出了错误“找不到成员下标” 它应该打印“书” 问题答案: 请注意,返回可选的。我们必须强制展开: 或使用可选的链接
问题内容: 我正在尝试复制在目标C中执行的for循环,但遇到“’AnyObject’没有名为’GeneratorType’的成员错误: 这是我的雨燕 我试过为字典定义一个holder变量。任何人都可以看到我在做什么错吗? 问题答案: 这不是字典的循环。它循环通过存储在其中一个字典键中的数组。例如,如果您有一个字符串数组作为字典的键之一,这就是想要做的事情。 如果您确实想只遍历字典,这在Swift中
问题内容: 在此页面上,我看到了一些有趣的东西: 请注意,有一种快速的命令可以(实际上)仅处理str键。 这不会影响算法的复杂性,但是会显着影响以下恒定因素:典型程序完成的速度。 那到底是什么意思呢? 这是否意味着使用字符串作为键总是更快? 如果是,为什么? 更新: 感谢您提供有关优化的建议!但实际上,我对简单的事实更感兴趣,而不是是否或何时进行优化。 更新2: 感谢您的出色回答,在这里我将引用@
问题内容: 我正在开发一类分析微量滴定板的课程。样本在单独的文件中描述,并且条目用于有序词典。关键之一是pH,通常以浮点数给出。例如6.8 我可以将其导入为十进制,以避免将浮点数作为dict键。另一种解决方案是将点替换为例如6p8之类的p或在我的样本描述中写入6p8,从而从一开始就消除了问题。但这会在以后引起麻烦,因为我无法在图中绘制6p8的pH值。 您将如何解决这个问题? 问题答案: 使用浮点数
问题内容: 我想创建一个python字典,将字典中缺少的键的键值返回给我。 用法示例: 问题答案: 对此有一个钩子: