Protocols let you define what a type can do without caring about what it actually is. Once that clicks, a huge chunk of Swift and SwiftUI starts making sense.

Picture this. You're building an anime battle simulator and you need a function that calculates how long it would take for a fighter to travel to the battlefield. Easy enough โ€” you write it for Ninja:

func sendToMission(distance: Int, using fighter: Ninja) {

// code here

}