Protocols can require conforming types to implement methods.

Require a method

ticketId
method_requirements.swift
Replay: real traced execution (multi-file project)
protocol Summarizable {
    func summary() -> String
}

struct Ticket: Summarizable {
    let id: Int
    let owner: String

    func summary() -> String {
        return "#\(id) \(owner)"
    }
}

let ticketId = 42
let ticket = Ticket(id: ticketId, owner: "Ada")
let summary = ticket.summary()

print(summary)
protocol Summarizable {
    func summary() -> String
}

struct Ticket: Summarizable {
    let id: Int
    let owner: String

    func summary() -> String {
        return "#\(id) \(owner)"
    }
}

let ticketId = 7
let ticket = Ticket(id: ticketId, owner: "Ada")
let summary = ticket.summary()

print(summary)
protocol Summarizable {
    func summary() -> String
}

struct Ticket: Summarizable {
    let id: Int
    let owner: String

    func summary() -> String {
        return "#\(id) \(owner)"
    }
}

let ticketId = 105
let ticket = Ticket(id: ticketId, owner: "Ada")
let summary = ticket.summary()

print(summary)
  1. ticketId ← 42, ticket ← Ticket(id: 42, owner: "Ada")

    14let ticketId→ 42 = 42  //@ticketId=7, 10515let ticket→ Ticket(id: 42, owner: "Ada") = Ticket(id: ticketId42, owner: "Ada")16let summary = ticketTicket(id: 42, owner: "Ada").summary()
  2. func summary() -> String

    9func summary() -> String {10    return "#\(id42) \(ownerAda)"11}
  3. summary ← #42 Ada

    15let ticket = Ticket(id: ticketId, owner: "Ada")16let summary→ #42 Ada = ticketTicket(id: 42, owner: "Ada").summary()1718print(summary#42 Ada)
    output#42 Ada
  1. ticketId ← 7, ticket ← Ticket(id: 7, owner: "Ada")

    14let ticketId→ 7 = 715let ticket→ Ticket(id: 7, owner: "Ada") = Ticket(id: ticketId7, owner: "Ada")16let summary = ticketTicket(id: 7, owner: "Ada").summary()
  2. func summary() -> String

    9func summary() -> String {10    return "#\(id7) \(ownerAda)"11}
  3. summary ← #7 Ada

    15let ticket = Ticket(id: ticketId, owner: "Ada")16let summary→ #7 Ada = ticketTicket(id: 7, owner: "Ada").summary()1718print(summary#7 Ada)
    output#7 Ada
  1. ticketId ← 105, ticket ← Ticket(id: 105, owner: "Ada")

    14let ticketId→ 105 = 10515let ticket→ Ticket(id: 105, owner: "Ada") = Ticket(id: ticketId105, owner: "Ada")16let summary = ticketTicket(id: 105, owner: "Ada").summary()
  2. func summary() -> String

    9func summary() -> String {10    return "#\(id105) \(ownerAda)"11}
  3. summary ← #105 Ada

    15let ticket = Ticket(id: ticketId, owner: "Ada")16let summary→ #105 Ada = ticketTicket(id: 105, owner: "Ada").summary()1718print(summary#105 Ada)
    output#105 Ada
method requirement A method requirement describes the method signature that each conforming type must implement.