This SwiftUI view shows "Loading..." first. Then it waits 1 second using await inside fetchMessage(). After waiting, it updates the text to "Hello from async!" smoothly without freezing the app.
iOS Swift
import SwiftUI
struct ContentView: View {
@State private var message = "Loading..."
var body: some View {
Text(message)
.padding()
.task {
message = await fetchMessage()
}
}
func fetchMessage() async -> String {
try? await Task.sleep(nanoseconds: 1_000_000_000) // wait 1 second
return"Hello from async!"
}
}
OutputSuccess
Important Notes
Use await only inside async functions or closures.
Using await lets your app stay responsive while waiting.
Remember to mark functions that use await as async.
Summary
await pauses a function until an async task finishes.
It helps keep your app smooth and responsive.
Use await only inside async functions.
Practice
(1/5)
1. What does the await keyword do in Swift's async functions?
easy
A. It converts a synchronous function to asynchronous.
B. It makes the function run faster.
C. It pauses the function until the async task completes.
D. It cancels the async task immediately.
Solution
Step 1: Understand the role of await
The await keyword pauses the execution of an async function until the awaited task finishes.
Step 2: Compare other options
Options B, C, and D describe behaviors that await does not perform.
Final Answer:
It pauses the function until the async task completes. -> Option C
Quick Check:
await pauses async tasks = A [OK]
Hint: Remember: await waits for task completion before continuing [OK]
Common Mistakes:
Thinking await speeds up the function
Using await outside async functions
Confusing await with task cancellation
2. Which of the following is the correct way to declare an async function that uses await inside it?
easy
A. func fetchData() async { let data = await loadData() }
B. func fetchData() { let data = await loadData() }
C. async func fetchData() { let data = await loadData() }
D. func fetchData() async await { let data = loadData() }
Solution
Step 1: Check async function declaration syntax
In Swift, the correct syntax is func name() async {} to declare an async function.
Step 2: Verify usage of await inside async function
func fetchData() async { let data = await loadData() } correctly uses await inside an async function. Options B, C, and D have syntax errors.
Final Answer:
func fetchData() async { let data = await loadData() } -> Option A
Quick Check:
Async function syntax = A [OK]
Hint: Async functions must have 'async' keyword before braces [OK]
Common Mistakes:
Omitting async keyword in function declaration
Placing async before func keyword
Adding await in function signature
3. What will be printed by this Swift code?
func fetchNumber() async -> Int {
return 5
}
func printNumber() async {
let number = await fetchNumber()
print(number)
}
Task {
await printNumber()
}
medium
A. No output, code has syntax error
B. 5
C. 0
D. The program crashes
Solution
Step 1: Understand async function behavior
The function fetchNumber() returns 5 asynchronously. Using await waits for this result.
Step 2: Trace the print statement
The printNumber() function awaits fetchNumber() and prints the returned value 5.
Final Answer:
5 -> Option B
Quick Check:
Await returns value before print = C [OK]
Hint: Await pauses until value returns, then prints it [OK]
Common Mistakes:
Expecting 0 because of async
Thinking code crashes without main thread
Confusing async function call without await
4. Identify the error in this Swift code snippet:
func loadData() async -> String {
return "Data"
}
func showData() {
let result = await loadData()
print(result)
}
medium
A. Missing async keyword in showData function declaration.
B. print statement is not allowed inside async functions.
C. loadData function should not return String.
D. Cannot use await inside a non-async function.
Solution
Step 1: Check function declarations and await usage
The function showData() is not marked async but uses await, which is invalid.
Step 2: Understand await usage rules
In Swift, await can only be used inside async functions. So showData() must be async to use await.
Final Answer:
Cannot use await inside a non-async function. -> Option D
Quick Check:
Await only in async functions = D [OK]
Hint: Await requires async function context [OK]
Common Mistakes:
Forgetting to mark function async when using await
Thinking await works in normal functions
Misunderstanding return types with async
5. You want to fetch user data and then fetch user posts, both are async functions. Which code correctly waits for both tasks in order using await?
hard
A. func loadUserData() async {
let user = await fetchUser()
let posts = await fetchPosts(user.id)
print(posts)
}
B. func loadUserData() async {
let user = fetchUser()
let posts = fetchPosts(user.id)
print(posts)
}
C. func loadUserData() {
let user = await fetchUser()
let posts = await fetchPosts(user.id)
print(posts)
}
D. func loadUserData() async {
let user = await fetchUser()
let posts = fetchPosts(user.id)
print(posts)
}
Solution
Step 1: Confirm async function declaration
The function must be marked async to use await inside it, so options A and D are candidates.
Step 2: Check await usage for both async calls
func loadUserData() async {
let user = await fetchUser()
let posts = await fetchPosts(user.id)
print(posts)
} awaits both fetchUser() and fetchPosts(), ensuring sequential completion. func loadUserData() async {
let user = await fetchUser()
let posts = fetchPosts(user.id)
print(posts)
} misses await on fetchPosts().
Final Answer:
func loadUserData() async {
let user = await fetchUser()
let posts = await fetchPosts(user.id)
print(posts)
} -> Option A
Quick Check:
Await both async calls in async function = B [OK]
Hint: Await each async call to run in order inside async function [OK]
Common Mistakes:
Forgetting await on second async call
Not marking function async
Calling async functions without await
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.