Bird
Raised Fist0
iOS Swiftmobile~10 mins

Async sequences in iOS Swift - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to declare an async sequence using AsyncStream.

iOS Swift
let numbers = AsyncStream<Int> { continuation in
    continuation.yield(1)
    continuation.yield(2)
    continuation.finish()
}

Task: Use a for await loop to iterate over [1].
Drag options to blanks, or click blank then click option'
Anumbers
BArray
CDispatchQueue
DTask
Attempts:
3 left
💡 Hint
Common Mistakes
Trying to iterate over Array with for await (Array is not async sequence).
Using DispatchQueue or Task instead of the async sequence variable.
2fill in blank
medium

Complete the async function to return an AsyncStream of integers from 1 to 3.

iOS Swift
func makeNumbers() -> AsyncStream<Int> {
    AsyncStream { continuation in
        for i in 1...3 {
            continuation.[1](i)
        }
        continuation.finish()
    }
}
Drag options to blanks, or click blank then click option'
Asend
Byield
Cemit
Dpush
Attempts:
3 left
💡 Hint
Common Mistakes
Using send, emit, or push which are not valid methods for AsyncStream.
3fill in blank
hard

Fix the error in the async sequence iteration by completing the missing keyword.

iOS Swift
func printNumbers() async {
    let stream = AsyncStream<Int> { continuation in
        continuation.yield(10)
        continuation.finish()
    }

    for [1] number in stream {
        print(number)
    }
}
Drag options to blanks, or click blank then click option'
Alet
Basync
Cawait
Dyield
Attempts:
3 left
💡 Hint
Common Mistakes
Using for async or just for which causes errors.
4fill in blank
hard

Fill both blanks to create an AsyncStream that yields strings and finishes properly.

iOS Swift
let greetings = AsyncStream<String> { [1] in
    [2].yield("Hello")
    [2].finish()
}
Drag options to blanks, or click blank then click option'
Acontinuation
Bstream
Ctask
Dsequence
Attempts:
3 left
💡 Hint
Common Mistakes
Using different names for the parameter and calls causing errors.
5fill in blank
hard

Fill all three blanks to create a filtered async sequence of integers greater than 5.

iOS Swift
let filtered = AsyncStream<Int> { continuation in
    for i in 1...10 {
        if i [1] 5 {
            continuation.[2](i)
        }
    }
    continuation.[3]()
}
Drag options to blanks, or click blank then click option'
A>
Byield
Cfinish
D<
Attempts:
3 left
💡 Hint
Common Mistakes
Using < or wrong method names causing logic or syntax errors.

Practice

(1/5)
1. What is the main purpose of using async sequences in Swift?
easy
A. To perform synchronous loops faster
B. To create static arrays of data
C. To handle data that arrives over time asynchronously
D. To store data permanently on disk

Solution

  1. Step 1: Understand async sequences concept

    Async sequences allow handling data that comes in over time, not all at once.
  2. Step 2: Compare options with async sequence use

    Only To handle data that arrives over time asynchronously describes handling data arriving asynchronously, which matches async sequences.
  3. Final Answer:

    To handle data that arrives over time asynchronously -> Option C
  4. Quick Check:

    Async sequences = handle data over time [OK]
Hint: Async sequences handle data arriving over time [OK]
Common Mistakes:
  • Thinking async sequences create static data
  • Confusing async sequences with synchronous loops
  • Assuming async sequences store data permanently
2. Which of the following is the correct syntax to iterate over an async sequence named stream?
easy
A. for value in stream.await { print(value) }
B. for value in await stream { print(value) }
C. await for value in stream { print(value) }
D. for await value in stream { print(value) }

Solution

  1. Step 1: Recall async sequence iteration syntax

    Swift uses for await to loop over async sequences.
  2. Step 2: Match syntax with options

    Only for await value in stream { print(value) } uses for await value in stream, which is correct syntax.
  3. Final Answer:

    for await value in stream { print(value) } -> Option D
  4. Quick Check:

    Use 'for await' to loop async sequences [OK]
Hint: Use 'for await' before the loop variable [OK]
Common Mistakes:
  • Placing 'await' after 'for' incorrectly
  • Using 'await' inside the loop variable
  • Trying to access '.await' property on sequence
3. Given the async sequence numbers that yields 1, 2, 3, what will this code print?
for await num in numbers {
  print(num * 2)
}
medium
A. 2 4 6
B. 1 2 3
C. 0 2 4
D. Error: Cannot multiply async sequence

Solution

  1. Step 1: Understand the async sequence values

    The sequence yields 1, 2, and 3 asynchronously.
  2. Step 2: Calculate output inside loop

    Each number is multiplied by 2 and printed: 2, 4, 6.
  3. Final Answer:

    2 4 6 -> Option A
  4. Quick Check:

    Multiply each yielded value by 2 [OK]
Hint: Multiply each async value inside the loop [OK]
Common Mistakes:
  • Printing original values without multiplication
  • Expecting synchronous output order
  • Thinking async sequences cause errors here
4. What is wrong with this code snippet?
for num in numbers {
  print(num)
}

Assuming numbers is an async sequence.
medium
A. Should use 'while' loop instead of 'for'
B. Missing 'await' keyword before the loop variable
C. Async sequences cannot be iterated
D. Missing 'async' keyword in function declaration

Solution

  1. Step 1: Identify iteration syntax for async sequences

    Async sequences require 'for await' to iterate properly.
  2. Step 2: Check code snippet

    The code uses 'for num in numbers' without 'await', which is incorrect.
  3. Final Answer:

    Missing 'await' keyword before the loop variable -> Option B
  4. Quick Check:

    Async sequence loops need 'for await' [OK]
Hint: Always use 'for await' with async sequences [OK]
Common Mistakes:
  • Omitting 'await' in the loop
  • Thinking async sequences can't be iterated
  • Confusing async function declaration with loop syntax
5. You want to collect the first 3 values from an async sequence updates into an array. Which code correctly does this?
hard
A. var results = [] for await update in updates { results.append(update) if results.count == 3 { break } }
B. var results = [] for update in updates { results.append(update) if results.count == 3 { break } }
C. var results = [] while let update = await updates.next() { results.append(update) if results.count == 3 { break } }
D. var results = [] updates.forEach { update in results.append(update) if results.count == 3 { break } }

Solution

  1. Step 1: Understand async sequence iteration and breaking

    Use 'for await' to iterate async sequences and break when count reaches 3.
  2. Step 2: Evaluate each option

    var results = [] for await update in updates { results.append(update) if results.count == 3 { break } } uses 'for await' with break after 3 items, correct. var results = [] for update in updates { results.append(update) if results.count == 3 { break } } lacks 'await'. var results = [] while let update = await updates.next() { results.append(update) if results.count == 3 { break } } uses invalid syntax for async sequences. var results = [] updates.forEach { update in results.append(update) if results.count == 3 { break } } uses 'forEach' which doesn't support async iteration or breaking.
  3. Final Answer:

    var results = [] for await update in updates { results.append(update) if results.count == 3 { break } } -> Option A
  4. Quick Check:

    Use 'for await' and break after 3 items [OK]
Hint: Use 'for await' and break after collecting 3 items [OK]
Common Mistakes:
  • Omitting 'await' in the loop
  • Using synchronous loops on async sequences
  • Trying to use 'forEach' with async sequences
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