Class declaration syntax in Swift - Time & Space Complexity
When we write a class in Swift, it's important to know how the time it takes to create or use that class changes as we add more parts to it.
We want to answer: How does the time to declare and use a class grow when the class has more properties or methods?
Analyze the time complexity of the following code snippet.
class Person {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
func greet() {
print("Hello, my name is \(name)")
}
}
This code defines a simple class with two properties, an initializer, and a method to greet.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: There are no loops or repeated operations inside the class declaration itself.
- How many times: The initializer and method run once per object created or method call, but the class declaration runs once when the program loads.
Explain the growth pattern intuitively.
| Input Size (number of properties/methods) | Approx. Operations |
|---|---|
| 2 | Small, fixed setup time |
| 10 | Still small, grows a little |
| 100 | More setup work, but still linear growth |
Pattern observation: The time to declare a class grows roughly in a straight line as you add more properties or methods.
Time Complexity: O(n)
This means the time to declare a class grows linearly with the number of properties and methods it has.
[X] Wrong: "Declaring a class always takes the same time no matter how big it is."
[OK] Correct: Adding more properties or methods means more work for the compiler to set up, so the time grows with size.
Understanding how class size affects setup time helps you write clear and efficient code, a skill that shows you think about how your programs work behind the scenes.
"What if we added inheritance or protocols to the class? How would the time complexity change?"
Practice
Car in Swift?Solution
Step 1: Recognize Swift class syntax
In Swift, classes start with the keywordclassfollowed by the class name and curly braces.Step 2: Match the correct option
class Car { } usesclass Car { }, which is the correct syntax for declaring a class named Car.Final Answer:
class Car { } -> Option CQuick Check:
Swift class declaration = class ClassName { } [OK]
- Using 'def' or 'function' which are not Swift keywords
- Confusing struct with class
- Missing curly braces
Solution
Step 1: Understand property declaration order
In Swift, properties should be declared before the initializer for clarity and correctness.Step 2: Check initializer syntax
The initializer must assign the parameter to the property usingself.name = name.Final Answer:
class Person { var name: String; init(name: String) { self.name = name } } -> Option BQuick Check:
Properties before init, use self.property = parameter [OK]
- Declaring properties after init causing errors
- Assigning parameter to self incorrectly
- Missing semicolon or braces
class Animal {
var name: String
init(name: String) {
self.name = name
}
func speak() -> String {
return "Hello, I am \(name)"
}
}
let dog = Animal(name: "Buddy")
print(dog.speak())Solution
Step 1: Understand class initialization
The class Animal has a propertynameinitialized viainit(name: String). The instancedogis created with name "Buddy".Step 2: Analyze the speak() method output
Thespeak()method returns a string with the name property interpolated. So it returns "Hello, I am Buddy".Final Answer:
Hello, I am Buddy -> Option DQuick Check:
String interpolation with property = Hello, I am Buddy [OK]
- Confusing property name with string literal
- Forgetting to call speak() method
- Assuming default values without init
class Book {
var title: String
init(title: String) {
title = title
}
}Solution
Step 1: Check property assignment in initializer
The initializer assignstitle = title, which assigns the parameter to itself, not to the property.Step 2: Correct assignment syntax
It should beself.title = titleto assign the parameter value to the property.Final Answer:
Property 'title' is not initialized correctly -> Option AQuick Check:
Use self.property = parameter to assign [OK]
- Assigning parameter to itself instead of property
- Forgetting self keyword
- Assuming implicit assignment
Rectangle with properties width and height, and a method area() that returns the area. Which of the following is the correct complete class declaration?Solution
Step 1: Check property initialization
Propertieswidthandheightmust be assigned usingself.width = widthandself.height = heightin the initializer.Step 2: Verify method return type and body
Thearea()method must return aDoubleand usereturn width * height.Final Answer:
class Rectangle { var width: Double var height: Double init(width: Double, height: Double) { self.width = width self.height = height } func area() -> Double { return width * height } } -> Option AQuick Check:
Use self.property in init and return in methods [OK]
- Assigning parameters to themselves without self.
- Missing return statement in method
- Incorrect method return type
Ready to prove it?
Pass the test and this pattern moves unknown
