📖 Scenario: You are building a simple app to manage information about books in a library. You want to decide whether to use a struct or a class to represent each book.
🎯 Goal: Create a Swift program that defines a Book using a struct, then add a configuration to decide if the book is available, and finally print the book details. This will help you understand when to use structs versus classes.
📋 What You'll Learn
Create a struct named Book with properties title (String) and author (String)
Create a variable isAvailable of type Bool to indicate if the book is available
Create an instance of Book with title "Swift Programming" and author "Apple"
Print the book's title, author, and availability status
💡 Why This Matters
🌍 Real World
Structs are great for simple data containers like book info where you want copies to be independent.
💼 Career
Understanding structs vs classes is key in Swift development for writing efficient and safe code.
Progress0 / 4 steps
1
Create the Book struct
Create a struct called Book with two properties: title of type String and author of type String.
Swift
Hint
Use the struct keyword and define two var properties inside.
2
Add availability status variable
Create a variable called isAvailable of type Bool and set it to true.
Swift
Hint
Define a variable outside the struct to track availability.
3
Create a Book instance
Create a constant called myBook and assign it a Book instance with title set to "Swift Programming" and author set to "Apple".
Swift
Hint
Use the struct initializer with named parameters.
4
Print book details and availability
Print the book's title, author, and availability using print and an f-string style with \(myBook.title), \(myBook.author), and \(isAvailable).
Swift
Hint
Use print with string interpolation to show all details.
Practice
(1/5)
1. Which statement best describes when to use a struct instead of a class in Swift?
easy
A. Use struct when you want to share data between multiple parts of your app.
B. Use struct when you need inheritance and shared references.
C. Use struct for simple data that should be copied when assigned or passed.
D. Use struct only for UI elements like views.
Solution
Step 1: Understand struct behavior
Structs are value types, meaning they are copied when assigned or passed around.
Step 2: Compare with class behavior
Classes are reference types, shared by multiple references and support inheritance.
Final Answer:
Use struct for simple data that should be copied when assigned or passed. -> Option C
2. Which of the following is the correct way to declare a struct in Swift?
easy
A. class Person { var name: String }
B. struct Person { var name: String }
C. struct Person: Class { var name: String }
D. class Person: struct { var name: String }
Solution
Step 1: Recall struct declaration syntax
In Swift, structs are declared with the keyword struct followed by the name and braces.
Step 2: Check each option
struct Person { var name: String } is correct. Using class is incorrect for structs. Structs cannot inherit from Class, and classes cannot inherit from struct.
Final Answer:
struct Person { var name: String } -> Option B
Quick Check:
Struct declaration = struct Name { } [OK]
Hint: Structs start with 'struct' keyword, not 'class' [OK]
Common Mistakes:
Using 'class' keyword to declare a struct
Trying to inherit from a class in a struct
Mixing struct and class syntax
3. Consider this Swift code:
struct Point {
var x: Int
var y: Int
}
var p1 = Point(x: 1, y: 2)
var p2 = p1
p2.x = 10
print(p1.x)
What is the output?
medium
A. 1
B. 10
C. 0
D. Compilation error
Solution
Step 1: Understand struct copying behavior
Assigning p1 to p2 copies the data because Point is a struct (value type).
Step 2: Analyze mutation effect
Changing p2.x to 10 does not affect p1.x, which remains 1.
Final Answer:
1 -> Option A
Quick Check:
Struct copy means original unchanged = 1 [OK]
Hint: Structs copy on assignment; original stays same [OK]
Common Mistakes:
Assuming p1.x changes when p2.x changes
Confusing structs with classes (reference types)
Expecting runtime error on mutation
4. This Swift code tries to share data between two variables:
class Counter {
var count = 0
}
var c1 = Counter()
var c2 = c1
c2.count = 5
print(c1.count)
But the output is not as expected. What is the problem?
medium
A. Counter is a class, so c1 and c2 share the same instance
B. Counter is a class, but c2 is a copy, so changes don't reflect
C. Counter should be a struct to share data
D. Counter needs to conform to a protocol to share data
Solution
Step 1: Identify class reference behavior
Classes are reference types, so c1 and c2 point to the same object.
Step 2: Understand shared mutation
Changing c2.count to 5 changes the shared instance, so c1.count also becomes 5.
Final Answer:
Counter is a class, so c1 and c2 share the same instance -> Option A
Quick Check:
Classes share references = shared data [OK]
Hint: Classes share instances; structs copy data [OK]
Common Mistakes:
Thinking classes copy on assignment
Expecting structs to share data
Believing protocols affect sharing automatically
5. You are designing a Swift app that tracks user sessions. Each session has a unique ID and mutable state shared across multiple parts of the app. Which type should you choose and why?
Options: A) Use a struct because it copies data and avoids bugs. B) Use a class because it allows shared mutable state with identity. C) Use a struct with inheritance to share state. D) Use a class but avoid mutability to keep data safe.
hard
A. Use a struct because it copies data and avoids bugs.
B. Use a class but avoid mutability to keep data safe.
C. Use a struct with inheritance to share state.
D. Use a class because it allows shared mutable state with identity.
Solution
Step 1: Analyze requirements for shared mutable state
The session data must be shared and mutable across multiple parts, requiring a single shared instance.
Step 2: Choose between struct and class
Structs copy data, so changes in one copy won't reflect elsewhere. Classes share references and support identity, fitting the need.
Step 3: Evaluate other options
Structs do not support inheritance, so Use a struct with inheritance to share state. is invalid. Avoiding mutability in classes (Use a class but avoid mutability to keep data safe.) contradicts the requirement for mutable shared state.
Final Answer:
Use a class because it allows shared mutable state with identity. -> Option D
Quick Check:
Shared mutable state = class [OK]
Hint: Shared mutable data needs class, not struct [OK]
Common Mistakes:
Choosing struct for shared mutable state
Thinking structs support inheritance
Avoiding mutability in classes when needed
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.