🔴Protocol Extensions
Protocol Definition vs. Protocol Extension
// 🔸 protocol definition
protocol Logging {
func log(_ message: String) // method requirement
var filename: String { get } // property requirement
}
// 🌀 protocol extension
extension Logging {
// ⭐ default implementation
func log(_ message: String) {
print("\(Date()): \(message).")
}
// ⭐ default value
var filename: String { return "app.log" }
}// 🔸 protocol definition
protocol Developer {}
// 🌀 protocol extension
extension Developer {
// ⭐ added in extension but not in definition
func attendMeeting() { print("OK, let's go!") }
}
// 📦 conforming type
struct SeniorDeveloper: Developer {
func attendMeeting() { print("No way!") }
}
// ⭐ protocol extension method is called
let dev: Developer = SeniorDeveloper()
dev.attendMeeting() // ⭐ "OK, let's go!"❗
// ⭐ instance method is called
let david = SeniorDeveloper()
david.attendMeeting() // ⭐ "No way!"Conditional Protocol Extensions
Last updated