Unterschied zwischen der Verwendung von ObjectIdentifier () und dem Operator '==='

Nehmen wir an, ich implementiere eine Root-Klasse in Swift, die das @ übernimmEquatable protocol (Ich möchte feststellen können, ob ein Array meines Typs eine bestimmte Instanz enthält oder nicht.)

Was ist der Unterschie -wenn überhaupt, in diesem speziellen Fall- zwischen der Implementierung des erforderlichen Protokolls== operator as:

public static func ==(lhs: MyClass, rhs: MyClass) -> Bool {

    return ObjectIdentifier(lhs) == ObjectIdentifier(rhs)
}

... im Gegensatz dazu:

public static func ==(lhs: MyClass, rhs: MyClass) -> Bool {

    return (lhs === rhs)
}

Als Referenz, das ist, was die Dokumentation über @ saObjectIdentifier():

Ein eindeutiger Bezeichner für eine Klasseninstanz oder einen Metatyp. In Swift haben nur Klasseninstanzen und Metatypen eindeutige Identitäten. Es gibt keinen Identitätsbegriff für Strukturen, Enums, Funktionen oder Tupel.

... und das ist, was der Abschnitt "Basic Operators" von Die Swift-Programmiersprache (Swift 3) sagt über das=== Operator

HINWEI

Swift bietet auch zwei Identitätsoperatoren === und!==), mit dem Sie testen, ob zwei Objektreferenzen auf dieselbe Objektinstanz verweisen. Weitere Informationen finden Sie unter Klassen und Strukturen.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage