Skip to content

Latest commit

 

History

History
21 lines (16 loc) · 1.7 KB

18.5 - Delegation.md

File metadata and controls

21 lines (16 loc) · 1.7 KB

Delegation is a design pattern that enables a class or structure to hand off (or delegate) some of its responsibilities to an instance of another type. This design pattern is implemented by defining a protocol that encapsulates the delegated responsibilities, such that a conforming type (known as a delegate) is guaranteed to provide the functionality that has been delegated. Delegation can be used to respond to a particular action, or to retrieve data from an external source without needing to know the underlying type of that source.

Here is an example of a DiceGame protocol, and a DiceGameDelegate protocol which can track progress through the game.

protocol DiceGame {
    var dice: Dice { get }
    func play()
}
protocol DiceGameDelegate {
    func gameDidStart(_ game: DiceGame)
    func game(_ game: DiceGame, didStartNewTurnWithDiceRoll diceRoll: Int)
    func gameDidEnd(_ game: DiceGame)
}

An example implementation of these protocols, as well as a full implementation of their uses is included in the Swift Language Guide section on delegation. Rather than copy it out, please consult it for more information.

Previous Note | Back To Contents | Next Note