Bird
Raised Fist0
Swiftprogramming~5 mins

Convenience initializers in Swift - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a convenience initializer in Swift?
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
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
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
Why use convenience initializers?
ATo prevent subclassing
BTo provide simpler ways to create instances with default values
CTo override superclass methods
DTo declare constants
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
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

      1. Step 1: Understand the role of convenience initializers

        Convenience initializers are shortcuts to create objects more easily by calling a designated initializer.
      2. 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.
      3. Final Answer:

        To provide an easier way to create an object by calling a designated initializer -> Option A
      4. Quick Check:

        Convenience initializer = shortcut calling designated initializer [OK]
      Hint: Convenience initializers always call a designated initializer [OK]
      Common Mistakes:
      • Thinking convenience initializers create objects independently
      • Confusing convenience initializers with deinitializers
      • Believing convenience initializers override superclass initializers
      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

      1. Step 1: Recall the correct syntax for convenience initializers

        In Swift, the keyword convenience comes before init without any function keyword.
      2. Step 2: Check each option

        convenience init(name: String) { self.init() } matches the correct syntax. Options B, C, and D misuse keywords or order.
      3. Final Answer:

        convenience init(name: String) { self.init() } -> Option D
      4. 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

      1. 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".
      2. Step 2: Analyze the object creation

        Creating myCar with Car() calls the convenience initializer, which sets color to "Red".
      3. Final Answer:

        "Red" -> Option B
      4. 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

      1. Step 1: Recall rules for convenience initializers

        A convenience initializer must call another initializer in the same class, not assign properties directly.
      2. Step 2: Check the convenience init implementation

        Here, self.name = "Unknown" is assigned directly, which is not allowed.
      3. Final Answer:

        Convenience initializer must call a designated initializer, not assign properties directly -> Option A
      4. 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

      1. Step 1: Identify designated and convenience initializers

        The designated initializer takes width and height. The convenience initializer should call the designated one.
      2. 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.
      3. 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
      4. 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 unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard