Попытка сравнить два объекта типа AnyObject с использованием оператора '==', определенного в Equatable protocol, приводит к ошибке компиляции в Swift. Кто-нибудь нашел способ сравнить такие объекты, не зная реального типа объектов, которые могут быть использованы для downcasting?
Фон для этого вопроса состоит в том, что у меня есть словарь Dictionary < String, AnyObject > где значения должны быть предоставлены с помощью индекса, тогда в какой-то момент мне нужно сравнить значения в словаре, чтобы убедиться, что они уникальны.
ИЗМЕНИТЬ Вот фрагмент, демонстрирующий проблему.
@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
}
}
}
Примечание, что общий тип, как < T: Equatable > объявленный в определении класса и используемый как тип значения словаря, не решит проблему, поскольку он не может использоваться в сочетании с подклассом NSManagedObject.