尝试使用 Equatable 协议中定义的“==”运算符来比较 AnyObject 类型的两个对象会导致 Swift 中出现编译错误。有没有人找到一种方法来比较这些对象,而不知道可用于向下转换的对象的真实类型?
这个问题的背景是我有一个字典 Dictionary ,其中应该通过下标提供值,然后在某些时候我需要比较字典中的值以确保它们是唯一的。
EDIT这是演示该问题的片段。
@objc(FooObject)
public class FooObject: NSManagedObject {
@NSManaged public var properties: Dictionary<String, AnyObject>
public subscript(property: String) -> AnyObject? {
get {
return properties[property]
}
set(newValue) {
for propertyValue in properties.values {
if propertyValue == newValue { // This line is not compiling: Cannot invoke '==' with AnyObject
println("Values in are expected to be unique!")
// Throw an exception here ...
}
}
properties[property] = newValue
}
}
}
Note在类定义中声明并用作字典的值类型的泛型(如 )无法解决问题,因为它不能与 NSManagedObject 子类结合使用。
使用 Swift 文档中的 === 运算符:
Swift 还提供了两个标识运算符(=== 和 !==),您可以使用它们来测试两个对象引用是否都引用同一个对象实例。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)