To name a few: Swift's type system is far more sophisticated (e.g. you can say "This is a list of numbers" and have it statically enforced that you don't accidentally stick a string in there), it does a lot of plain direct dispatch rather than Objective-C's dynamic-everything, and it uses a proper option type instead of having null landmines everywhere.