wrappedValue is the actual value stored and accessed through a property wrapper. It represents the main data the wrapper manages.
Click to reveal answer
beginner
What does projectedValue provide in Swift property wrappers?
projectedValue offers additional functionality or metadata related to the wrapped value, accessible using the $ prefix before the property name.
Click to reveal answer
beginner
How do you access the projectedValue of a property wrapper in Swift?
You access it by prefixing the property name with a $. For example, if the property is name, the projected value is accessed as $name.
Click to reveal answer
intermediate
Why use projectedValue in a property wrapper?
It allows exposing extra features like validation status, bindings, or helper methods without mixing them with the main value.
Click to reveal answer
intermediate
Example: What will print(user.$name.isValid) output if name is a wrapped property with a projectedValue providing validation?
It prints whether the name value passes validation, like true or false, depending on the logic inside projectedValue.
Click to reveal answer
What keyword do you use to access the projectedValue of a property wrapper in Swift?
ACall a method named project()
BUse .wrappedValue
CUse & before the property name
DPrefix the property name with $
✗ Incorrect
You access the projectedValue by prefixing the property name with a dollar sign ($).
Which of these is true about wrappedValue?
AIt provides extra metadata about the property
BIt stores the main data of the property wrapper
CIt is accessed using $ prefix
DIt is only used for debugging
✗ Incorrect
wrappedValue holds the main value managed by the property wrapper.
If a property wrapper does not define projectedValue, what happens when you try to access it?
ACompilation error
BReturns the wrappedValue
CReturns nil
DReturns a default Boolean
✗ Incorrect
Accessing $property requires projectedValue to be defined; otherwise, it causes a compile error.
Which of these is a common use of projectedValue?
AProviding validation status
BStoring the main value
CChanging the property type
DReplacing the property name
✗ Incorrect
projectedValue often provides extra info like validation or bindings.
How do you define projectedValue inside a property wrapper?
AAs a stored property named <code>wrappedValue</code>
BAs a method named <code>projectedValue()</code>
CAs a computed property named <code>projectedValue</code>
DBy overriding <code>init()</code>
✗ Incorrect
projectedValue is defined as a computed property inside the wrapper.
Explain in your own words what wrappedValue and projectedValue are in Swift property wrappers and how you use them.
Think about the main value and extra features a property wrapper can provide.
You got /4 concepts.
Describe a real-life scenario where using projectedValue would be helpful in a Swift app.
Consider validation, bindings, or extra info related to a property.
You got /3 concepts.
Practice
(1/5)
1. What does wrappedValue represent in a Swift property wrapper?
easy
A. The main value stored or controlled by the property wrapper
B. An extra method to modify the property
C. A way to access the property's type information
D. A function to reset the property to default
Solution
Step 1: Understand the role of wrappedValue
The wrappedValue is the core value that the property wrapper manages or stores internally.
Step 2: Differentiate from other features
Unlike projectedValue, wrappedValue is the actual data, not extra info or behavior.
Final Answer:
The main value stored or controlled by the property wrapper -> Option A
Quick Check:
wrappedValue = main stored value [OK]
Hint: wrappedValue is the property's actual stored value [OK]
Common Mistakes:
Confusing wrappedValue with projectedValue
Thinking wrappedValue is a method
Assuming wrappedValue holds extra metadata
2. Which syntax correctly accesses the projectedValue of a property wrapper named score?
easy
A. score.projectedValue
B. $score
C. score.$projectedValue
D. score->projectedValue
Solution
Step 1: Recall how to access projectedValue
In Swift, the projectedValue is accessed using the dollar sign prefix before the property name.
Step 2: Match syntax to property name
For a property named score, the projectedValue is accessed as $score.
Final Answer:
$score -> Option B
Quick Check:
projectedValue = $propertyName [OK]
Hint: Use $ before property name to get projectedValue [OK]
Common Mistakes:
Trying to access projectedValue as a normal property
Using dot syntax incorrectly
Confusing $score with score.$projectedValue
3. Given this code, what will be printed?
@propertyWrapper
struct Capitalized {
private var value: String = ""
var wrappedValue: String {
get { value }
set { value = newValue.capitalized }
}
var projectedValue: String {
"Length: \(value.count)"
}
}
struct Person {
@Capitalized var name: String
}
var p = Person()
p.name = "john doe"
print(p.name)
print(p.$name)
medium
A. John Doe
Length: 8
B. john doe
Length: 8
C. John Doe
Length: 7
D. john doe
Length: 7
Solution
Step 1: Understand wrappedValue behavior
Setting p.name to "john doe" triggers the setter, which capitalizes the string to "John Doe".
Step 2: Calculate projectedValue output
The projectedValue returns the length of the capitalized string. "John Doe" has 8 characters including the space.
Hint: wrappedValue changes value, projectedValue gives extra info [OK]
Common Mistakes:
Counting characters without space
Ignoring capitalization effect
Using p.name instead of p.$name for projectedValue
4. Identify the error in this property wrapper usage:
@propertyWrapper
struct Trimmed {
var wrappedValue: String {
didSet { wrappedValue = wrappedValue.trimmingCharacters(in: .whitespaces) }
}
}
struct User {
@Trimmed var username: String
}
var u = User()
u.username = " alice "
print(u.username)
medium
A. wrappedValue cannot be mutated inside didSet
B. Cannot use didSet in property wrapper
C. Missing initial value for wrappedValue
D. Property wrapper must be a class, not struct
Solution
Step 1: Check wrappedValue declaration
The wrappedValue property lacks an initial value or backing storage, causing a compile error.
Step 2: Understand property wrapper requirements
Property wrappers must have a stored wrappedValue or initializer to set it; here it's missing.
Final Answer:
Missing initial value for wrappedValue -> Option C
Quick Check:
wrappedValue needs initial value or storage [OK]
Hint: wrappedValue must have storage or initializer [OK]
Common Mistakes:
Trying to mutate wrappedValue inside didSet
Assuming didSet works without storage
Confusing struct vs class requirement
5. You want to create a property wrapper that stores an integer and also tracks how many times the value was changed. Which approach correctly uses wrappedValue and projectedValue to achieve this?
hard
A. Use projectedValue only to store and access the integer
B. Use projectedValue to store the integer and wrappedValue to return the change count
C. Use wrappedValue for both storing integer and change count
D. Use wrappedValue to store the integer and projectedValue to return the change count
Solution
Step 1: Define roles of wrappedValue and projectedValue
wrappedValue should hold the main integer value; projectedValue can provide extra info like change count.
Step 2: Match roles to requirements
Tracking changes is extra info, so projectedValue is ideal to expose the count without mixing with main value.
Final Answer:
Use wrappedValue to store the integer and projectedValue to return the change count -> Option D
Quick Check:
wrappedValue = main data, projectedValue = extra info [OK]
Hint: wrappedValue stores data, projectedValue tracks extra info [OK]
Common Mistakes:
Swapping roles of wrappedValue and projectedValue
Trying to store multiple values in wrappedValue
Using projectedValue as main storage
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.