What does the identity operator === check in Swift?
The <code>===</code> operator checks if two references point to the exact same instance of a class in memory.
Click to reveal answer
beginner
What is the difference between == and === in Swift?
== checks if two values are equal in content, while === checks if two references point to the same object instance.
Click to reveal answer
beginner
What does the identity operator !== do?
The !== operator checks if two references do NOT point to the same instance of a class.
Click to reveal answer
intermediate
Can === and !== be used with value types like structs or enums?
No, <code>===</code> and <code>!==</code> only work with class instances because they compare object identity, not value equality.
Click to reveal answer
intermediate
Why would you use identity operators instead of equality operators?
Use identity operators to check if two variables refer to the exact same object, which is important when you want to know if they share the same instance, not just equal content.
Click to reveal answer
What does a === b check in Swift?
AIf a and b refer to the same class instance
BIf a and b have the same value
CIf a and b are both nil
DIf a and b are different types
✗ Incorrect
=== checks if two references point to the same object instance.
Which operator would you use to check if two class instances are NOT the same object?
A==
B!=
C!==
D===
✗ Incorrect
!== checks if two references do NOT point to the same instance.
Can === be used to compare two structs?
AYes, always
BNo, only class instances
CYes, but only if they conform to Equatable
DNo, only enums
✗ Incorrect
Identity operators only work with class instances, not value types like structs.
What will obj1 === obj2 return if both variables point to the same object?
AIt causes a compile error
Bfalse
Cnil
Dtrue
✗ Incorrect
If both references point to the same instance, === returns true.
Which operator checks if two variables have equal content, not identity?
A==
B===
C!==
D!=
✗ Incorrect
== checks for value equality, not identity.
Explain the difference between the identity operators === and !== in Swift.
Think about whether two variables refer to the exact same object or not.
You got /3 concepts.
When should you use identity operators instead of equality operators in Swift?
Consider if you care about the actual object or just its data.
You got /3 concepts.
Practice
(1/5)
1. What does the identity operator === check in Swift?
easy
A. If two variables are of the same type
B. If two variables have the same value
C. If two variables refer to the exact same class instance
D. If two variables are both nil
Solution
Step 1: Understand the purpose of ===
The === operator checks if two references point to the same object in memory.
Step 2: Differentiate from value equality
Unlike ==, which checks value equality, === checks identity (same instance).
Final Answer:
If two variables refer to the exact same class instance -> Option C
Quick Check:
=== checks identity [OK]
Hint: Remember: === means same object, not just same value [OK]
Common Mistakes:
Confusing === with == for value equality
Using === with structs or value types
Thinking === checks type equality
2. Which of the following is the correct syntax to check if two class instances a and b are NOT the same object in Swift?
easy
A. if a != b
B. if a !==== b
C. if a !=== b
D. if a !== b
Solution
Step 1: Identify the correct identity operator for inequality
The operator to check if two references are NOT the same object is !==.
Step 2: Verify syntax correctness
Options C and D have invalid operators. if a != b uses != which checks value inequality, not identity.
Final Answer:
if a !== b -> Option D
Quick Check:
Use !== for identity inequality [OK]
Hint: Use !== to check different objects, not != [OK]
Common Mistakes:
Using != instead of !== for identity check
Typing invalid operators like !=== or !====
Confusing identity operators with value operators
3. Consider the following Swift code:
class Person {}
let p1 = Person()
let p2 = p1
let p3 = Person()
print(p1 === p2)
print(p1 === p3)
What will be the output?
medium
A. true\nfalse
B. false\ntrue
C. true\ntrue
D. false\nfalse
Solution
Step 1: Analyze the references
p2 is assigned to p1, so both point to the same object. p3 is a new instance.
Step 2: Evaluate identity comparisons
p1 === p2 is true because they are the same instance. p1 === p3 is false because they are different instances.
Final Answer:
true\nfalse -> Option A
Quick Check:
Same instance = true, different instance = false [OK]
Hint: === true if same object, false if different [OK]
Common Mistakes:
Assuming p1 and p3 are same because same class
Confusing value equality with identity
Forgetting p2 points to p1's instance
4. The following Swift code produces an error. What is the problem?
struct Point {
var x: Int
var y: Int
}
let p1 = Point(x: 1, y: 2)
let p2 = Point(x: 1, y: 2)
if p1 === p2 {
print("Same point")
}
medium
A. p1 and p2 are not initialized
B. Cannot use === with structs because they are value types
C. Missing parentheses in if condition
D. === operator requires optional types
Solution
Step 1: Identify the types used
Point is a struct, which is a value type in Swift.
Step 2: Understand identity operator restrictions
Identity operators === and !== only work with class instances (reference types), not value types like structs.
Final Answer:
Cannot use === with structs because they are value types -> Option B
Quick Check:
=== only for class instances [OK]
Hint: Use === only with classes, not structs or enums [OK]
Common Mistakes:
Trying to use === with value types
Assuming structs have identity
Ignoring compiler error message
5. You have a class Car and an array of Car instances. You want to find if a specific Car instance myCar is already in the array by identity (same object), not by value. Which Swift code correctly checks this?
hard
A. if cars.contains(where: { $0 === myCar }) { print("Found") }
B. if cars.contains(myCar) { print("Found") }
C. if cars.firstIndex(of: myCar) != nil { print("Found") }
D. if cars.filter({ $0 == myCar }).count > 0 { print("Found") }
Solution
Step 1: Understand identity check in collections
To check if an instance exists by identity, use === inside a closure with contains(where:).
Step 2: Analyze options
if cars.contains(where: { $0 === myCar }) { print("Found") } uses === correctly. Options B and C use == or of: which check value equality or require Equatable conformance. if cars.filter({ $0 == myCar }).count > 0 { print("Found") } uses == which is value equality.
Final Answer:
if cars.contains(where: { $0 === myCar }) { print("Found") } -> Option A
Quick Check:
Use contains(where:) with === for identity [OK]
Hint: Use contains(where:) with === to check object identity [OK]
Common Mistakes:
Using contains(myCar) which checks value equality
Assuming == checks identity
Not using closure for identity check
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.