Bird
Raised Fist0
Swiftprogramming~10 mins

Why inheritance is class-only in Swift - Visual Breakdown

Choose your learning style10 modes available
Concept Flow - Why inheritance is class-only in Swift
Define class A
↓
Define class B inheriting A
↓
Create instance of B
↓
Access properties/methods from A and B
↓
Attempt inheritance with struct/enum
↓
Compilation error: inheritance not allowed
↓
Reason: structs/enums are value types, classes are reference types
↓
Conclusion: inheritance only for classes
Inheritance works only with classes because classes are reference types that support shared behavior, while structs and enums are value types that do not support inheritance.
Execution Sample
Swift
class Animal {
    func sound() -> String { "Some sound" }
}

class Dog: Animal {
    override func sound() -> String { "Bark" }
}
Defines a base class Animal and a subclass Dog that inherits and overrides a method.
Execution Table
StepActionEvaluationResult
1Define class AnimalAnimal class createdAnimal class ready
2Define class Dog inheriting AnimalDog inherits AnimalDog class ready with Animal's methods
3Create instance dog of Dogdog is Dog instancedog can call sound()
4Call dog.sound()Dog's sound() overrides Animal's"Bark" returned
5Try inheritance with structstruct cannot inheritCompilation error
6Try inheritance with enumenum cannot inheritCompilation error
💡 Inheritance stops at structs/enums because they are value types and do not support inheritance.
Variable Tracker
VariableStartAfter Step 3After Step 4Final
dognilDog instance createddog.sound() returns "Bark"dog remains Dog instance
Key Moments - 2 Insights
Why can't structs or enums inherit from other types?
Structs and enums are value types that copy data, so inheritance (which relies on shared references) is not supported, as shown in execution_table steps 5 and 6.
Why does Dog override Animal's sound() method?
Because Dog inherits from Animal (a class), it can override methods to provide specific behavior, as seen in execution_table step 4.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what does dog.sound() return at step 4?
ACompilation error
B"Some sound"
C"Bark"
Dnil
💡 Hint
Check execution_table row with Step 4 where dog.sound() is called.
At which step does the code show inheritance is not allowed for structs?
AStep 3
BStep 5
CStep 2
DStep 6
💡 Hint
Look at execution_table rows for struct inheritance attempts.
If Dog was a struct instead of a class, what would happen?
AIt would cause a compilation error
BIt would inherit Animal successfully
CIt would override methods like a class
DIt would behave like a class instance
💡 Hint
Refer to execution_table steps 5 and 6 about inheritance restrictions.
Concept Snapshot
Inheritance in Swift works only with classes.
Classes are reference types allowing shared behavior.
Structs and enums are value types and cannot inherit.
Trying inheritance with structs/enums causes errors.
Use classes when you need inheritance.
Full Transcript
In Swift, inheritance is allowed only for classes because classes are reference types that share behavior through a common identity. Structs and enums are value types that copy data and do not support inheritance. The code example shows a base class Animal and a subclass Dog that overrides a method. When trying to inherit with structs or enums, the compiler gives an error. This is because inheritance relies on shared references, which value types do not have. Therefore, inheritance is class-only in Swift.

Practice

(1/5)
1. Why is inheritance only allowed for classes in Swift?
easy
A. Because only classes can have properties
B. Because structs and enums are faster to create
C. Because classes are reference types and share data by reference
D. Because structs and enums cannot have methods

Solution

  1. Step 1: Understand type behavior in Swift

    Classes are reference types, meaning instances share the same data in memory.
  2. Step 2: Compare with structs and enums

    Structs and enums are value types, so they copy data instead of sharing it.
  3. Final Answer:

    Because classes are reference types and share data by reference -> Option C
  4. Quick Check:

    Inheritance = Reference types only [OK]
Hint: Inheritance needs shared data, so only classes can do it [OK]
Common Mistakes:
  • Thinking structs can inherit like classes
  • Believing enums can have inheritance
  • Confusing methods with inheritance
2. Which Swift declaration correctly shows inheritance allowed only for classes?
easy
A. class MyClass: ParentClass {}
B. struct MyStruct: ParentClass {}
C. enum MyEnum: ParentClass {}
D. protocol MyProtocol: ParentClass {}

Solution

  1. Step 1: Identify inheritance syntax in Swift

    Only classes can inherit from other classes using the colon syntax.
  2. Step 2: Check each declaration

    Structs, enums, and protocols cannot inherit from classes.
  3. Final Answer:

    class MyClass: ParentClass {} -> Option A
  4. Quick Check:

    Inheritance syntax = class only [OK]
Hint: Only classes use colon for inheritance from classes [OK]
Common Mistakes:
  • Trying to inherit a class in a struct
  • Using enum to inherit a class
  • Confusing protocol inheritance with class inheritance
3. What will happen if you try this Swift code?
struct ParentStruct {}
struct ChildStruct: ParentStruct {}
medium
A. ChildStruct inherits ParentStruct successfully
B. Compile-time error: structs cannot inherit
C. Runtime error when creating ChildStruct
D. ChildStruct copies ParentStruct properties automatically

Solution

  1. Step 1: Analyze struct inheritance rules

    Structs in Swift cannot inherit from other structs or classes.
  2. Step 2: Predict compiler behavior

    The compiler will produce an error because inheritance is not allowed for structs.
  3. Final Answer:

    Compile-time error: structs cannot inherit -> Option B
  4. Quick Check:

    Struct inheritance = error [OK]
Hint: Structs cannot inherit; expect compile error [OK]
Common Mistakes:
  • Assuming structs inherit like classes
  • Expecting runtime error instead of compile error
  • Thinking structs copy properties via inheritance
4. Find the error in this Swift code:
enum ParentEnum {}
class ChildClass: ParentEnum {}
medium
A. Enums cannot be inherited by classes
B. Enums cannot have child classes
C. Classes cannot inherit from enums
D. All of the above

Solution

  1. Step 1: Check inheritance rules for enums and classes

    Enums are value types and cannot be inherited or used as base classes.
  2. Step 2: Understand class inheritance restrictions

    Classes can only inherit from other classes, not enums.
  3. Step 3: Combine observations

    All statements about enums and classes here are correct.
  4. Final Answer:

    All of the above -> Option D
  5. Quick Check:

    Enum inheritance = disallowed [OK]
Hint: Classes inherit classes only; enums can't be base classes [OK]
Common Mistakes:
  • Thinking enums can be base classes
  • Confusing enum cases with inheritance
  • Ignoring that classes can't inherit enums
5. You want to share behavior between a struct and a class in Swift. Given inheritance is class-only, what is the best approach?
hard
A. Use a protocol to define shared behavior
B. Convert the struct to a class to inherit
C. Make the struct inherit from the class
D. Use enum inheritance to share code

Solution

  1. Step 1: Recall inheritance limits

    Inheritance works only for classes, so structs cannot inherit from classes.
  2. Step 2: Identify alternative sharing method

    Protocols allow both structs and classes to share behavior by conforming to them.
  3. Step 3: Evaluate options

    Using protocols is the best way to share behavior without inheritance.
  4. Final Answer:

    Use a protocol to define shared behavior -> Option A
  5. Quick Check:

    Protocols share behavior across types [OK]
Hint: Use protocols to share behavior with structs and classes [OK]
Common Mistakes:
  • Trying to inherit struct from class
  • Converting structs unnecessarily to classes
  • Thinking enums can inherit
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