Swift is static: The compiler must have all information about all classes and functions at compile time. You can "extend" an existing class (with an extension), but even then you must define completely at compile time what that extension consists of. Objective-C is dynamic: Objective-C was extremely influenced by Smalltalk, which had demonstrated the benefits of duck typing. This is also known as late binding, runtime binding, or the late dispatch. It’s dynamic because the responder of a message isn’t baked in at compile time, but is deferred until the actual point of sending the message.