Разница между использованием ObjectIdentifier () и оператора = ==
Допустим, я реализую корневой класс в Swift, который я объявляю, принимаетEquatable
протокол (я хочу быть в состоянии сказать, содержит ли массив моего типа данный экземпляр или нет).
В чем разница - если есть, в данном конкретном случае - между реализацией протокола требуется==
оператор как:
public static func ==(lhs: MyClass, rhs: MyClass) -> Bool {
return ObjectIdentifier(lhs) == ObjectIdentifier(rhs)
}
... в отличие от просто сделать это:
public static func ==(lhs: MyClass, rhs: MyClass) -> Bool {
return (lhs === rhs)
}
В качестве ссылки, это то, что говорится в документацииObjectIdentifier()
:
Уникальный идентификатор экземпляра класса или метатипа. В Swift только экземпляры классов и метатипы имеют уникальные идентификаторы. Не существует понятия идентичности для структур, перечислений, функций или кортежей.
... и это то, что раздел "Основные операторы"Язык программирования Swift (Swift 3) говорит о===
оператор:
НОТА
Swift также предоставляет два идентификатора оператора (===
а также!==
), который вы используете, чтобы проверить, ссылаются ли обе ссылки на один и тот же экземпляр объекта. Для получения дополнительной информации см. Классы и структуры.