This UI component allows users to upload and download files to and from cloud storage. It shows a list of files stored in the cloud and provides buttons to add new files or refresh the list.
The main screen is a UIViewController with a navigation bar at the top. Below it is a table view listing the cloud files. At the bottom is a toolbar with two buttons: one to add/upload a file and one to refresh the file list.
Render Trace - 4 Steps
Step 1: UIViewController
Step 2: UINavigationBar
Step 3: UITableView
Step 4: UIToolbar
State Change - Re-render
Trigger:User taps the Add button to upload a new file
Before
fileList contains current files from cloud storage
→
After
fileList updated with the newly uploaded file
Re-renders:UITableView reloads to show the updated list of files
UI Quiz - 3 Questions
Test your understanding
What happens when the user taps the Refresh button?
AThe file list reloads to show the latest files from cloud storage
BThe app closes
CA new file is uploaded automatically
DThe navigation bar title changes
Key Insight
Using a UITableView to list cloud files provides a familiar and scrollable interface. Placing action buttons in a UIToolbar at the bottom keeps controls accessible and consistent with iOS design. Updating the table view after state changes ensures the UI always reflects the current cloud storage state.
Practice
(1/5)
1.
What is the main purpose of Cloud Storage in an iOS app?
easy
A. To create user interface elements
B. To store app settings locally on the device
C. To save files online for easy access and sharing
D. To manage app navigation flow
Solution
Step 1: Understand Cloud Storage role
Cloud Storage is designed to save files online so users can access and share them easily.
Step 2: Compare options
Options B, C, and D describe other app functions unrelated to Cloud Storage.
Final Answer:
To save files online for easy access and sharing -> Option C
Quick Check:
Cloud Storage = Online file saving [OK]
Hint: Cloud Storage means saving files online, not local data [OK]
Common Mistakes:
Confusing Cloud Storage with local storage
Thinking it manages UI or navigation
Assuming it stores app settings only
2.
Which of the following is the correct way to create a reference to a file named image.png in Firebase Cloud Storage using Swift?
let storage = Storage.storage()
let storageRef = ...
easy
A. storageRef = storage.child("image.png")
B. storageRef = storage.reference().child("image.png")
C. storageRef = Storage.reference("image.png")
D. storageRef = storage.reference("image.png")
Solution
Step 1: Recall Firebase Storage syntax
To get a reference, use storage.reference() then child("filename") to point to the file.
Step 2: Check each option
storageRef = storage.reference().child("image.png") correctly chains reference() and child(). Options B, C, and D use incorrect method calls or syntax.
Final Answer:
storageRef = storage.reference().child("image.png") -> Option B
Quick Check:
Use reference().child() to get file reference [OK]
Hint: Use reference().child("filename") to get file reference [OK]
Common Mistakes:
Calling child() directly on storage
Using Storage.reference() instead of storage.reference()
Passing filename directly to reference()
3.
What will be printed if the following Swift code successfully uploads a file to Firebase Storage?
let storageRef = Storage.storage().reference().child("file.txt")
let localFile = URL(fileURLWithPath: "/path/to/file.txt")
storageRef.putFile(from: localFile, metadata: nil) { metadata, error in
if let error = error {
print("Upload failed: \(error.localizedDescription)")
} else {
print("Upload succeeded")
}
}
medium
A. Upload succeeded
B. Upload failed: File not found
C. Upload failed: Network error
D. No output
Solution
Step 1: Analyze the completion handler
The closure checks if error is nil; if so, it prints "Upload succeeded".
Step 2: Given successful upload
Since upload is successful, error is nil, so the else block runs printing "Upload succeeded".
Final Answer:
Upload succeeded -> Option A
Quick Check:
Success means error is nil, print "Upload succeeded" [OK]
Hint: If error is nil, upload succeeded message prints [OK]
Common Mistakes:
Assuming error is always non-nil
Confusing success and failure blocks
Ignoring the asynchronous completion handler
4.
Identify the error in this Swift code snippet for uploading a file to Firebase Storage:
let storageRef = Storage.storage().reference().child("doc.pdf")
let fileURL = URL(string: "/documents/doc.pdf")!
storageRef.putFile(from: fileURL, metadata: nil) { metadata, error in
if error != nil {
print("Upload error")
} else {
print("Upload complete")
}
}
medium
A. Using URL(string:) instead of URL(fileURLWithPath:)
B. Missing metadata parameter in putFile
C. Incorrect child path syntax
D. No completion handler provided
Solution
Step 1: Check URL creation method
URL(string:) is for web URLs; local file paths need URL(fileURLWithPath:).
Step 2: Identify impact
Using URL(string:) with a local path returns nil or incorrect URL, causing upload failure.
Final Answer:
Using URL(string:) instead of URL(fileURLWithPath:) -> Option A
Quick Check:
Local file URLs need URL(fileURLWithPath:) [OK]
Hint: Use URL(fileURLWithPath:) for local file paths [OK]
Common Mistakes:
Using URL(string:) for local files
Forgetting to unwrap optional URLs safely
Ignoring completion handler errors
5.
You want to upload multiple images to Firebase Cloud Storage and keep track of their download URLs for later use. Which approach correctly handles this in Swift?
let images = [URL(fileURLWithPath: "/img1.png"), URL(fileURLWithPath: "/img2.png")]
var downloadURLs: [URL] = []
for imageURL in images {
let ref = Storage.storage().reference().child(imageURL.lastPathComponent)
ref.putFile(from: imageURL, metadata: nil) { metadata, error in
if error == nil {
ref.downloadURL { url, error in
if let url = url {
downloadURLs.append(url)
}
}
}
}
}
print(downloadURLs)
hard
A. The code will cause a syntax error due to missing await
B. This code correctly prints all download URLs immediately
C. The code uploads files but does not get download URLs
D. This code may print an empty array because uploads are asynchronous
Solution
Step 1: Understand asynchronous behavior
Uploads and downloadURL calls run asynchronously, so print(downloadURLs) runs before completion.
Step 2: Effect on printed output
Because of async calls, downloadURLs is likely empty when printed immediately after the loop.
Final Answer:
This code may print an empty array because uploads are asynchronous -> Option D
Quick Check:
Async uploads delay URL collection, print runs too early [OK]
Hint: Async calls need completion before using results [OK]
Common Mistakes:
Expecting synchronous behavior from async uploads
Printing results before upload completion
Not using dispatch groups or async-await to wait
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.