What? changing the functionality of a method at runtime.
When to use? for the codes that you don't own but you want to modify its functionality, such as adding logging. (for the codes you have control over, just use extension.)
How? see Method swizzling in iOS swift