Extending existing types with a protocol

We can declare a type that we haven't declared ourselves, including Swift's own types, to conform to our custom protocol by using an extension:

extension Int: Talkative 
{
func sayHi()
{
print("Hey, I'm \(self)")

if self%2 != 0
{
print("Isn't that odd?")
}
}
}

We can now call the sayHi method on any int:

1.sayHi() 
Note that by using self, we can access the instance's value.

This is something you couldn't do with subclassing--we now have the ability to customize any and all Swift types in any way that we need to, including primitives such as Int and Double.