📖 Scenario: Imagine you are building a simple app to keep track of books in a library. You want to store information about each book, like its title and author. You need to decide whether to use a struct or a class in Swift to represent each book.
🎯 Goal: Learn why Swift prefers structs over classes for many tasks by creating a simple struct to represent books and seeing how it works.
📋 What You'll Learn
Create a struct called Book with two properties: title and author, both of type String.
Create a variable called myBook and assign it a Book instance with title "Swift Basics" and author "Jane Doe".
Create a copy of myBook called copiedBook and change its title to "Advanced Swift".
Print both myBook and copiedBook titles to show they are different.
💡 Why This Matters
🌍 Real World
Apps often store data like user profiles, settings, or items using structs for safety and speed.
💼 Career
Understanding when to use structs helps you write better Swift code, a key skill for iOS development jobs.
Progress0 / 4 steps
1
Create the Book struct
Create a struct called Book with two properties: title and author, both of type String.
Swift
Hint
Use the struct keyword and define two String properties inside.
2
Create a Book instance
Create a variable called myBook and assign it a Book instance with title "Swift Basics" and author "Jane Doe".
Swift
Hint
Use the struct's memberwise initializer to create myBook.
3
Copy and modify the Book instance
Create a copy of myBook called copiedBook and change its title to "Advanced Swift".
Swift
Hint
Assign myBook to copiedBook and then change the title property.
4
Print both book titles
Print the titles of myBook and copiedBook to show they are different.
Swift
Hint
Use print() to show the titles of both books.
Practice
(1/5)
1. Why are structs preferred over classes in Swift for small data types?
easy
A. Because structs allow inheritance and polymorphism
B. Because structs use more memory than classes
C. Because structs copy data, avoiding unexpected changes from shared references
D. Because structs require manual memory management
Solution
Step 1: Understand data copying in structs
Structs in Swift create a copy of data when assigned or passed, so changes to one copy don't affect others.
Step 2: Compare with classes and shared references
Classes use references, so multiple variables can point to the same data, causing unexpected changes.
Final Answer:
Because structs copy data, avoiding unexpected changes from shared references -> Option C
2. Which of the following is the correct way to define a struct in Swift?
easy
A. struct Person { var name: String }
B. class Person { var name: String }
C. struct Person = (name: String)
D. struct Person: String { var name }
Solution
Step 1: Recall Swift struct syntax
Structs are defined using the keyword struct followed by the name and curly braces containing properties.
Step 2: Check each option
struct Person { var name: String } correctly uses struct Person { var name: String }. class Person { var name: String } uses class, not struct. Options C and D have invalid syntax.
Final Answer:
struct Person { var name: String } -> Option A
Quick Check:
Correct struct syntax = struct Person { var name: String } [OK]
Hint: Use 'struct Name { var property: Type }' for structs [OK]
Common Mistakes:
Using 'class' keyword instead of 'struct'
Incorrect property declaration syntax
Trying to assign struct like a tuple
3. What will be the output of this Swift code?
struct Point { var x: Int; var y: Int }
var p1 = Point(x: 5, y: 10)
var p2 = p1
p2.x = 20
print(p1.x)
medium
A. 5
B. 20
C. 10
D. Compilation error
Solution
Step 1: Understand struct copying behavior
Assigning p1 to p2 copies the data. They are independent after assignment.
Step 2: Analyze the change to p2.x
Changing p2.x to 20 does not affect p1.x, which remains 5.
Final Answer:
5 -> Option A
Quick Check:
Struct copy means p1.x stays 5 [OK]
Hint: Struct assignment copies data; original stays unchanged [OK]
Common Mistakes:
Thinking p1.x changes when p2.x changes
Confusing structs with class reference behavior
Expecting runtime error due to assignment
4. Identify the error in this Swift code using structs:
struct Rectangle {
var width: Int
var height: Int
}
var rect1 = Rectangle(width: 10, height: 20)
var rect2 = rect1
rect2.width = 30
print(rect1.width)
medium
A. rect2.width cannot be changed because structs are immutable
B. rect1.width prints 30 because structs share references
C. Compilation error due to missing initializer
D. No error; rect1.width prints 10 because structs copy data
Solution
Step 1: Check mutability of struct instances
Since rect2 is a variable (var), its properties can be changed.
Step 2: Understand copying behavior
Assigning rect1 to rect2 copies the data. Changing rect2.width does not affect rect1.width.
Final Answer:
No error; rect1.width prints 10 because structs copy data -> Option D
Quick Check:
Struct copy means rect1.width stays 10 [OK]
Hint: Structs copy data; changing copy doesn't affect original [OK]
Common Mistakes:
Assuming structs are immutable by default
Thinking structs share references like classes
Expecting compilation error for missing initializer
5. You want to create a simple data type to store a user's profile with name and age. Why is using a struct better than a class in Swift for this case?
hard
A. Structs use reference counting, improving performance for user data
B. Structs provide automatic copying, preventing accidental shared changes in user data
C. Structs allow inheritance, making it easier to extend user profiles
D. Structs require manual memory management, giving more control over user data
Solution
Step 1: Consider data safety for user profiles
User profiles are simple data that should not change unexpectedly when copied or passed around.
Step 2: Compare structs and classes for this use
Structs copy data automatically, so each copy is independent, avoiding bugs from shared references common in classes.
Final Answer:
Structs provide automatic copying, preventing accidental shared changes in user data -> Option B
Quick Check:
Struct copy = safer user profile data [OK]
Hint: Use structs for simple data to avoid shared reference bugs [OK]