A convenience initializer is a secondary initializer that helps create an instance of a class by calling a designated initializer with some default or simplified parameters. It makes object creation easier and more flexible.
Click to reveal answer
intermediate
How does a convenience initializer differ from a designated initializer?
A designated initializer fully initializes all properties and calls the superclass's designated initializer. A convenience initializer must call another initializer from the same class and cannot call a superclass initializer directly.
Click to reveal answer
beginner
What keyword do you use to declare a convenience initializer in Swift?
You use the keyword convenience before init to declare a convenience initializer, like convenience init().
Click to reveal answer
intermediate
Why do convenience initializers call other initializers in the same class?
Because convenience initializers are shortcuts, they reuse existing initialization logic by calling another initializer in the same class to avoid repeating code and ensure consistent setup.
Click to reveal answer
intermediate
Can a convenience initializer call a superclass initializer directly?
No, a convenience initializer cannot call a superclass initializer directly. It must call another initializer in the same class, which eventually calls the superclass initializer through a designated initializer.
Click to reveal answer
Which keyword is used to define a convenience initializer in Swift?
Afinal
Boverride
Crequired
Dconvenience
✗ Incorrect
The keyword convenience is used before init to define a convenience initializer.
What must a convenience initializer do inside its body?
ACall a superclass initializer directly
BInitialize all properties itself
CCall another initializer from the same class
DReturn an optional value
✗ Incorrect
A convenience initializer must call another initializer from the same class to reuse initialization logic.
Which of the following is true about designated initializers compared to convenience initializers?
ADesignated initializers fully initialize properties and call superclass initializers
BDesignated initializers must call convenience initializers
CConvenience initializers can call superclass initializers directly
DConvenience initializers initialize all properties
BTo provide simpler ways to create instances with default values
CTo override superclass methods
DTo declare constants
✗ Incorrect
Convenience initializers provide simpler ways to create instances by setting default or common values.
Can a convenience initializer be marked as required?
ANo, only designated initializers can be required
BYes, convenience initializers can be required
CYes, but only in structs
DNo, initializers cannot be required
✗ Incorrect
Only designated initializers can be marked as required in Swift.
Explain what a convenience initializer is and why you would use one in Swift.
Think about how convenience initializers help make creating objects easier.
You got /4 concepts.
Describe the rules about how convenience initializers interact with designated initializers and superclass initializers.
Focus on the calling chain between initializers.
You got /3 concepts.
Practice
(1/5)
1. What is the main purpose of a convenience initializer in Swift?
easy
A. To provide an easier way to create an object by calling a designated initializer
B. To override a superclass initializer
C. To create a completely new object without calling any other initializer
D. To deallocate an object before it is destroyed
Solution
Step 1: Understand the role of convenience initializers
Convenience initializers are shortcuts to create objects more easily by calling a designated initializer.
Step 2: Compare options with this role
Only To provide an easier way to create an object by calling a designated initializer describes this purpose correctly; others describe unrelated concepts.
Final Answer:
To provide an easier way to create an object by calling a designated initializer -> Option A
2. Which of the following is the correct syntax for a convenience initializer in Swift?
easy
A. convenience func init(name: String) { self.init() }
B. init convenience(name: String) { self.init() }
C. func convenience init(name: String) { self.init() }
D. convenience init(name: String) { self.init() }
Solution
Step 1: Recall the correct syntax for convenience initializers
In Swift, the keyword convenience comes before init without any function keyword.
Step 2: Check each option
convenience init(name: String) { self.init() } matches the correct syntax. Options B, C, and D misuse keywords or order.
Final Answer:
convenience init(name: String) { self.init() } -> Option D
Quick Check:
Keyword order: convenience before init [OK]
Hint: Remember: 'convenience' keyword comes before 'init' [OK]
Common Mistakes:
Placing 'convenience' after 'init'
Using 'func' keyword with initializers
Incorrect keyword order causing syntax errors
3. Consider the following Swift code:
class Car {
var color: String
init(color: String) {
self.color = color
}
convenience init() {
self.init(color: "Red")
}
}
let myCar = Car()
What is the value of myCar.color?
medium
A. nil
B. "Red"
C. "" (empty string)
D. Compilation error
Solution
Step 1: Understand the initializers in the Car class
The designated initializer sets the color property. The convenience initializer calls the designated one with "Red".
Step 2: Analyze the object creation
Creating myCar with Car() calls the convenience initializer, which sets color to "Red".
Final Answer:
"Red" -> Option B
Quick Check:
Convenience init sets color to "Red" [OK]
Hint: Convenience init calls designated init with default values [OK]
Common Mistakes:
Assuming color is empty or nil without initialization
Thinking convenience init does not call designated init
Expecting compilation error due to missing default init
4. Identify the error in this Swift class using a convenience initializer:
class Person {
var name: String
convenience init() {
self.name = "Unknown"
}
init(name: String) {
self.name = name
}
}
medium
A. Convenience initializer must call a designated initializer, not assign properties directly
B. Designated initializer must be marked as convenience
C. Property 'name' must be optional
D. No error, code is correct
Solution
Step 1: Recall rules for convenience initializers
A convenience initializer must call another initializer in the same class, not assign properties directly.
Step 2: Check the convenience init implementation
Here, self.name = "Unknown" is assigned directly, which is not allowed.
Final Answer:
Convenience initializer must call a designated initializer, not assign properties directly -> Option A
Quick Check:
Convenience init must call designated init [OK]
Hint: Convenience init cannot set properties directly; must call designated init [OK]
Common Mistakes:
Assigning properties directly in convenience initializer
Marking designated initializer as convenience
Making properties optional unnecessarily
5. You want to create a Swift class Rectangle with a designated initializer that takes width and height, and a convenience initializer that creates a square by taking only one side length. Which of the following implementations correctly uses a convenience initializer?
hard
A. class Rectangle {
var width: Double
var height: Double
init(width: Double, height: Double) {
self.width = width
self.height = height
}
convenience init(side: Double) {
self.width = side
self.height = side
}
}
B. class Rectangle {
var width: Double
var height: Double
convenience init(width: Double, height: Double) {
self.width = width
self.height = height
}
init(side: Double) {
self.width = side
self.height = side
}
}
C. class Rectangle {
var width: Double
var height: Double
init(width: Double, height: Double) {
self.width = width
self.height = height
}
convenience init(side: Double) {
self.init(width: side, height: side)
}
}
D. class Rectangle {
var width: Double
var height: Double
init(width: Double, height: Double) {
self.width = width
self.height = height
}
convenience init(side: Double) {
self.height = side
}
}
Solution
Step 1: Identify designated and convenience initializers
The designated initializer takes width and height. The convenience initializer should call the designated one.
Step 2: Check each option for correct usage
class Rectangle {
var width: Double
var height: Double
init(width: Double, height: Double) {
self.width = width
self.height = height
}
convenience init(side: Double) {
self.init(width: side, height: side)
}
} correctly defines the designated init and the convenience init calls it with equal sides. Others either misuse convenience keyword or assign properties directly.
Final Answer:
class Rectangle {
var width: Double
var height: Double
init(width: Double, height: Double) {
self.width = width
self.height = height
}
convenience init(side: Double) {
self.init(width: side, height: side)
}
} -> Option C
Quick Check:
Convenience init calls designated init with side values [OK]
Hint: Convenience init must call designated init with all required parameters [OK]
Common Mistakes:
Marking designated initializer as convenience
Assigning properties directly in convenience initializer
Not calling designated initializer from convenience initializer
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.