Bird
Raised Fist0
Swiftprogramming~20 mins

Identity comparison (===) in Swift - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Swift Identity Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
What is the output of identity comparison with class instances?
Consider the following Swift code. What will be printed when it runs?
Swift
class Person {
    var name: String
    init(name: String) {
        self.name = name
    }
}

let p1 = Person(name: "Alice")
let p2 = Person(name: "Alice")
let p3 = p1

print(p1 === p2)
print(p1 === p3)
Afalse\ntrue
Btrue\nfalse
Cfalse\nfalse
Dtrue\ntrue
Attempts:
2 left
💡 Hint
Remember that === checks if two references point to the exact same object in memory.
🧠 Conceptual
intermediate
1:30remaining
Which statement about === in Swift is true?
Choose the correct statement about the identity operator === in Swift.
A<code>===</code> compares the values of two structs.
B<code>===</code> checks if two strings have the same characters.
C<code>===</code> can be used to compare two integers.
D<code>===</code> compares if two class instances are the same object.
Attempts:
2 left
💡 Hint
Think about what kinds of types === works with in Swift.
🔧 Debug
advanced
2:00remaining
Why does this code cause a compile error?
Examine the code below. Why does the line with if a === b cause a compile error?
Swift
struct Point {
    var x: Int
    var y: Int
}

let a = Point(x: 1, y: 2)
let b = Point(x: 1, y: 2)

if a === b {
    print("Same")
} else {
    print("Different")
}
ABecause <code>Point</code> does not implement the Equatable protocol.
BBecause <code>a</code> and <code>b</code> are constants, not variables.
CBecause <code>===</code> cannot be used with structs, only with class instances.
DBecause <code>===</code> requires both operands to be optional types.
Attempts:
2 left
💡 Hint
Recall the difference between value types and reference types in Swift.
❓ Predict Output
advanced
2:30remaining
What is the output when comparing optional class instances with ===?
What will this Swift code print?
Swift
class Box {
    let value: Int
    init(_ value: Int) { self.value = value }
}

let box1: Box? = Box(10)
let box2: Box? = Box(10)
let box3: Box? = box1
let box4: Box? = nil

print(box1 === box2)
print(box1 === box3)
print(box1 === box4)
Afalse\ntrue\nfalse
Btrue\ntrue\nfalse
Cfalse\nfalse\ntrue
Dtrue\nfalse\nfalse
Attempts:
2 left
💡 Hint
Remember that === works with optionals by unwrapping them and comparing references.
🚀 Application
expert
3:00remaining
How many unique instances are in this array?
Given the following Swift code, how many unique class instances does the array arr contain?
Swift
class Node {}

let n1 = Node()
let n2 = Node()
let n3 = n1
let n4 = n2
let n5 = Node()

let arr = [n1, n2, n3, n4, n5]
A5
B3
C4
D2
Attempts:
2 left
💡 Hint
Use identity comparison to find which variables point to the same instance.

Practice

(1/5)
1. What does the === operator check in Swift?
easy
A. If two variables refer to the exact same object instance
B. If two variables have the same value
C. If two variables are of the same type
D. If two variables are both nil

Solution

  1. Step 1: Understand the purpose of ===

    The === operator in Swift is used to check if two references point to the exact same object in memory.
  2. Step 2: Differentiate from value equality

    Unlike ==, which checks if values are equal, === checks identity, meaning the same instance.
  3. Final Answer:

    If two variables refer to the exact same object instance -> Option A
  4. Quick Check:

    Identity comparison = If two variables refer to the exact same object instance [OK]
Hint: Remember: === means same object, not just equal value [OK]
Common Mistakes:
  • Confusing === with == for value equality
  • Thinking === checks type equality
  • Assuming === works with structs or enums
2. Which of the following is the correct syntax to check if two class instances a and b are identical in Swift?
easy
A. if a === b { }
B. if a == b { }
C. if a = b { }
D. if a is b { }

Solution

  1. Step 1: Recall identity operator syntax

    In Swift, the identity operator to check if two references point to the same object is ===.
  2. Step 2: Identify correct usage

    The correct syntax is if a === b { }. The other options are either value equality, assignment, or invalid syntax.
  3. Final Answer:

    if a === b { } -> Option A
  4. Quick Check:

    Identity check syntax = if a === b { } [OK]
Hint: Use three equals signs (===) for identity check [OK]
Common Mistakes:
  • Using == instead of === for identity
  • Using single = which is assignment
  • Typing invalid operators like ===
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. false\nfalse
B. false\ntrue
C. true\ntrue
D. true\nfalse

Solution

  1. Step 1: Analyze object references

    Variable p2 is assigned to p1, so both point to the same object. p3 is a new instance.
  2. Step 2: Evaluate identity comparisons

    p1 === p2 is true because they are the same instance. p1 === p3 is false because they are different instances.
  3. Final Answer:

    true\nfalse -> Option D
  4. Quick Check:

    Same instance = true, different instance = false [OK]
Hint: Same variable means true; new instance means false [OK]
Common Mistakes:
  • Assuming different variables always mean false
  • Confusing === with == and expecting value equality
  • Ignoring that p2 points to p1's instance
4. The following Swift code gives a compile error. What is the problem?
class Car {}

let car1 = Car()
let car2 = Car()

if car1 == car2 {
    print("Same car")
}
medium
A. Cannot create instances of class Car
B. Missing parentheses in if statement
C. Cannot use == to compare class instances without Equatable conformance
D. Using === instead of ==

Solution

  1. Step 1: Understand == operator requirements

    By default, class instances cannot be compared with == unless the class conforms to Equatable.
  2. Step 2: Identify the error cause

    The code tries to use == without Car conforming to Equatable, causing a compile error.
  3. Final Answer:

    Cannot use == to compare class instances without Equatable conformance -> Option C
  4. Quick Check:

    == needs Equatable for classes [OK]
Hint: Use === for identity or add Equatable for == [OK]
Common Mistakes:
  • Thinking === causes error here
  • Assuming == works automatically for classes
  • Ignoring Equatable protocol requirement
5. You have a cache dictionary storing class instances by keys. You want to check if a newly created instance newObj is already stored in the cache by identity. Which Swift code correctly checks this?
class Data {}

var cache: [String: Data] = [:]
let newObj = Data()

// Check if newObj is already in cache by identity
hard
A. if cache.values.contains(newObj) { print("Found") }
B. if cache.values.contains(where: { $0 === newObj }) { print("Found") }
C. if cache.keys.contains(where: { $0 === newObj }) { print("Found") }
D. if cache.values.contains(where: { $0 == newObj }) { print("Found") }

Solution

  1. Step 1: Understand identity check in collections

    To check if an instance exists by identity, use === inside a closure with contains(where:).
  2. Step 2: Analyze options

    if cache.values.contains(where: { $0 === newObj }) { print("Found") } correctly uses cache.values.contains(where: { $0 === newObj }). if cache.values.contains(newObj) { print("Found") } uses contains without identity check, which requires Equatable. if cache.keys.contains(where: { $0 === newObj }) { print("Found") } incorrectly checks keys (strings) with identity. if cache.values.contains(where: { $0 == newObj }) { print("Found") } uses == which needs Equatable.
  3. Final Answer:

    if cache.values.contains(where: { $0 === newObj }) { print("Found") } -> Option B
  4. Quick Check:

    Use contains(where:) with === for identity [OK]
Hint: Use contains(where:) and === to check identity in collections [OK]
Common Mistakes:
  • Using contains without where and identity check
  • Checking keys instead of values
  • Using == without Equatable conformance
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard