Protocol extensions can provide behavior that conforming types inherit.

Share default behavior

default_implementation.swift
protocol Greeter {
    var name: String { get }
}

extension Greeter {
    func greeting() -> String {
        return "Hello, \(name)"
    }
}

struct Member: Greeter {
    let name: String
}

let memberName = 
let member = Member(name: memberName)
let message = member.greeting()

print(message)
protocol Greeter {
    var name: String { get }
}

extension Greeter {
    func greeting() -> String {
        return "Hello, \(name)"
    }
}

struct Member: Greeter {
    let name: String
}

let memberName = 
let member = Member(name: memberName)
let message = member.greeting()

print(message)
protocol Greeter {
    var name: String { get }
}

extension Greeter {
    func greeting() -> String {
        return "Hello, \(name)"
    }
}

struct Member: Greeter {
    let name: String
}

let memberName = 
let member = Member(name: memberName)
let message = member.greeting()

print(message)
protocol extension A protocol extension can define a method once so each conforming type can reuse it unless it needs custom behavior.