Initializers set up your objects with starting values. Designated initializers are the main way to make sure all parts of your object get proper values.
When you create a new object and want to give it starting values.
When you have a class with multiple properties that all need values.
When you want to make sure your object is fully ready to use after creation.
When you want to customize how an object is created with different starting options.
Syntax
Swift
class ClassName {
var property1: Type
var property2: Type
init(property1: Type, property2: Type) {
self.property1 = property1
self.property2 = property2
}
}
The init method is the initializer.
Designated initializers fully initialize all properties introduced by that class.
Examples
This is a designated initializer setting both name and age.
Swift
class Person {
var name: Stringvar age: Intinit(name: String, age: Int) {
self.name = name
self.age = age
}
}
Initializer sets brand and gives a default year.
Swift
class Car {
var brand: Stringvar year: Intinit(brand: String) {
self.brand = brand
self.year = 2024
}
}
Sample Program
This program creates a Rectangle with width and height using a designated initializer. Then it calculates and prints the area.
Swift
class Rectangle {
var width: Doublevar height: Doubleinit(width: Double, height: Double) {
self.width = width
self.height = height
}
func area() -> Double {
return width * height
}
}
let rect = Rectangle(width: 5.0, height: 3.0)
print("Area of rectangle: \(rect.area())")
OutputSuccess
Important Notes
Every property must have a value before the initializer finishes.
Use self to refer to the current object's properties inside the initializer.
Designated initializers ensure your object is fully ready to use.
Summary
Initializers set starting values for new objects.
Designated initializers fully initialize all properties of a class.
Use init methods to create safe, ready-to-use objects.
Practice
(1/5)
1. What is the main purpose of a designated initializer in Swift?
easy
A. To fully initialize all properties of a class before use
B. To provide default values for optional properties only
C. To create a copy of an existing object
D. To deallocate memory when an object is no longer needed
Solution
Step 1: Understand what initializers do
Initializers set starting values for new objects to ensure they are ready to use.
Step 2: Identify the role of designated initializers
Designated initializers fully initialize all properties of a class, making the object safe and complete.
Final Answer:
To fully initialize all properties of a class before use -> Option A
Quick Check:
Designated initializer = full property initialization [OK]
Hint: Designated init always sets all properties fully [OK]
Common Mistakes:
Confusing designated init with convenience init
Thinking initializers copy objects
Mixing initialization with deallocation
2. Which of the following is the correct syntax for a designated initializer in a Swift class?
easy
A. func init() { }
B. init() { }
C. constructor() { }
D. initialize() { }
Solution
Step 1: Recall Swift initializer syntax
In Swift, initializers use the keyword init without a return type or func keyword.
Step 2: Identify the correct syntax
The correct syntax is init() { }. Other options use incorrect keywords or syntax.
Final Answer:
init() { } -> Option B
Quick Check:
Swift designated init syntax = init() { } [OK]
Hint: Swift init uses just 'init', no func or constructor [OK]
Common Mistakes:
Using 'func' keyword with init
Using 'constructor' or 'initialize' instead of 'init'
Adding return types to init
3. Consider this Swift class:
class Person {
var name: String
var age: Int
init(name: String) {
self.name = name
self.age = 0
}
}
What will be the value of age after creating let p = Person(name: "Anna")?
medium
A. Name of the person
B. nil
C. Undefined
D. 0
Solution
Step 1: Analyze the initializer code
The initializer sets self.name = name and explicitly sets self.age = 0.
Step 2: Determine the value of age after initialization
Since age is set to 0 inside the initializer, the new object will have age = 0.
Final Answer:
0 -> Option D
Quick Check:
Explicit age assignment = 0 [OK]
Hint: Check initializer assignments for property values [OK]
Common Mistakes:
Assuming age is nil because not passed as parameter
Thinking age is uninitialized or undefined
Confusing name with age value
4. Identify the error in this Swift class initializer:
class Car {
var model: String
var year: Int
init(model: String) {
model = model
year = 2020
}
}
medium
A. Initializer missing return type
B. Class must inherit from NSObject
C. Properties are not initialized using self keyword
D. year property cannot be assigned a value
Solution
Step 1: Check property assignments in initializer
The code assigns model = model and year = 2020 without self., so it assigns parameters to themselves, not properties.
Properties must be assigned with self.model = model and self.year = 2020 to set the instance variables.
Final Answer:
Properties are not initialized using self keyword -> Option C
Quick Check:
Use self.property = value to initialize [OK]
Hint: Use self. to assign properties inside init [OK]
Common Mistakes:
Forgetting self. causes no property assignment
Adding return type to init
Thinking inheritance affects property assignment
5. You want to create a Swift class Book with properties title (String) and pages (Int). The designated initializer should allow setting both properties, but if pages is not provided, it defaults to 100. Which is the best way to write this initializer?
hard
A. init(title: String, pages: Int = 100) { self.title = title; self.pages = pages }
Step 1: Understand default parameter values in Swift
Swift allows default values in parameters, so pages: Int = 100 means pages defaults to 100 if not passed.
Step 2: Check initializer completeness and safety
The initializer init(title: String, pages: Int = 100) { self.title = title; self.pages = pages } sets both properties properly and safely with a default value. The version with only a title parameter cannot set pages explicitly. The version taking both parameters but only assigning title misses the pages assignment. The version using an optional Int? for pages with force unwrap is unsafe.
Final Answer:
init(title: String, pages: Int = 100) { self.title = title; self.pages = pages } -> Option A
Quick Check:
Default parameter = safe default value [OK]
Hint: Use default parameter values for optional init args [OK]
Common Mistakes:
Forgetting to assign all properties
Using force unwrap (!) unsafely
Not providing default value in parameter
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.