Objective C vs. Swift: Which is Better? (A Definitive Guide)
I hear this question all of the time when I’m consulting with developers.
Should I be using Objective-C or Swift?
It’s a common dilemma for developers. If you start asking around in the industry, you’ll hear different responses depending on who you ask.
One person may have had a bad experience with one of these programming languages, so they always steer clear of the other one.
On the flip side, some people just go with whichever language they learned first or feel more comfortable with. Everyone has their favorite.
The reality is that there isn’t always a clear choice.
Here’s a quick glance at some of the key highlights for each programming language.
Choosing your language for a project depends on lots of different factors. So I can’t sit here and decisively recommend one over the other.
But what I can do is explain some different circumstances where one may be more appropriate.
This doesn’t necessarily make it better. It just means that it will work best for that particular scenario.
I made this guide to give you some direction so you can make an informed decision for yourself.
What is Objective-C?
Objective-C is the main programming language for Apple OS X and iOS.
It’s by far the oldest of these two programming languages, and it was first introduced in 1984.
According to Apple, this language offers object-oriented capabilities as well as a dynamic runtime.
Using Objective-C means that you’ll get language-level support for your object literals and object graph management.
Objects are a huge component for building iOS and OS X applications. Cocoa or Cocoa Touch will provide you with some of these objects and classes.
The objects are part of the Objective-C classes, especially when they represent values.
Getting familiar with Xcode is a prerequisite to using Objective-C since that’s the integrated development environment (IDE) you’ll be building in.
If you’ve never used Objective-C, but you’re familiar with other C-based programming languages such as C# (used by Microsoft) or Java (used by Android), then it shouldn’t be as difficult for you to learn.
For those of you with extensive knowledge of other advanced object-oriented programming languages such as Ruby or Python, you won’t have trouble learning Objective-C either.
There are lots of established coding rules that you need to follow when you’re writing code in Objective-C.
For example, capitalization matters when you’re writing commands, especially for multiple words, which is referred to as camel case.
What is Swift?
Swift is a brand new programming language developed by Apple.
It was first released back in June 2014, so developers are still getting used to it. Apple created Swift to work with both Cocoa and Cocoa Touch.
This language works for macOS, iOS, watchOS, and tvOS.
The basic concepts of Swift are similar to Objective-C at its core, such as the extensible programming, dynamic dispatch, and late binding.
But Swift stands apart in terms of its ability to catch software bugs. It also addresses things like null pointers, which are common programming errors.
So how does it stack up when it comes to performance compared to Objective-C?
When Apple introduced Swift 2.0 at the Apple Worldwide Developer conference in 2015, they presented this information.
With such a significantly higher program speed than Objective-C, Swift has to be the clear favorite in terms of developer preference, right?
I won’t get into that just yet. We’ll talk about that a little later on.
The Swift programming language is open source. So it was built by both Apple developers as well as outside contributors.
Even in these early years of Swift’s release, it can already support Linux in addition to all of Apple’s platforms.
I briefly mentioned classes in their relationship to objects earlier during the overview of Objective-C. Well, Swift eliminates lots of classes that are perceived as unsafe code.
By default, Swift objects can never be nil. As a result, it’s a safe and clean way for you to write code. Ultimately this will prevent a large number of crashes.
Swift has a unique feature that is called optionals. With optionals, there are certain instances where nil would be valid, but the syntax makes you deal with it a way that’s safe and easy to comprehend.
Another benefit of the Swift syntax is that you can define your intent easily with keywords that are only three characters long.
This will save you time coding in the long run.
Experience and familiarity
When it comes down to deciding which one you should use over another, I always recommend starting with what you have the most experience with.
If you’ve been writing Objective-C language for the last five or ten years and never used Swift, there’s no reason to start right now unless you’re being forced to.
Sure, the day may come where you’ll have to learn or want to learn another language. But if you’ve got lots of projects in your queue, it’s better to just go with what you know best.
On the other hand, if you’re new to the industry, you may have learned Swift before you learned Objective-C.
Again, if that’s what you’re comfortable with, then go with it.
With that said, depending on your clients, they may request one language over another. If that’s the case, then obviously you’ll need to follow those instructions.
But don’t worry. Learning a new programming language isn’t difficult, it’s just different.
This is especially true if you’ve been using Objective-C and now you’re attempting to learn Swift.
It might be a little bit more challenging for those of you that are going to write Objective-C for the first time after only using Swift.
Something else to consider is how much experience and familiarity your team has with these programming languages.
Take a look at which programming languages mobile developers like the most.
As you can see, Objective-C is more popular than Swift, but only marginally. That’s incredible for a language that’s so new. I would imagine that Swift’s popularity will continue to rise in the coming years.
But let’s say for example you’re working as part of a four person development team.
You’ve only been a developer for a couple of years, so you’re more familiar with Swift. But if everyone else on your team likes Objective-C, it makes more sense to use that for your project.
It’s easier for one person to learn a new language than for three people to learn a new language, so you’ll have to be a team player here and make the adjustment.
If you really want to learn another language but don’t have a reason to, consider using the one you’re less familiar with for a prototype.
This will help you get your feet wet without delaying or impacting a full scale project.
Size of your projects
Does size matter? In terms of your programming language, yes.
For small projects, you can use whichever one you want. It’s easy to make changes. As I just said, you might even consider trying to learn a new language for a small prototype project.
With that said, even though I’ve talked about lots of the positive features of Swift, it’s still very new.
So I would not recommend using Swift for very large projects. That’s because changes to new versions are tedious and time consuming.
You may find yourself spending hours upon hours converting to new syntaxes even after a minor update. This could also cause broken builds that may last for a few days to even a week, depending on the size of your project.
Nobody wants that.
So don’t put yourself in a position where you get behind schedule, just because you wanted to try out a new programming language.
Depending on your project, one of the first things you’ll do as a developer is set up a timeline.
As you know, it’s very important to make sure that you and your clients are all on the same page when it comes to this estimated timeline.
You don’t want to promise a deadline that you can’t stick to, but you also shouldn’t drag your feet.
If you’re bound by strict timelines, I would say that you won’t have much time to learn a new language. This is a clear choice to just with what you know best.
For those of you that are new developers and are unfamiliar with both languages, I’d say you should go with Swift if you’ve got a tight deadline.
Swift can help you move faster, but as we just said earlier, there could be some delays down the road as new versions get released. So you’ll have to weigh that against how long you think it would take to learn Objective-C, which is harder.
If you’ve got a loose timeline with no firm deadline, consider trying the language that you’re less familiar with.
This is a great opportunity to learn a new skill. It will be something that you can add to your resume to make yourself more marketable.
Understanding how to use both languages will also make you an asset to working with other developers in the future.
Support tools, runtime, and stability
You don’t need to find a new IDE if you’ve been using Xcode to write iOS apps.
The new Xcode upgrades build process supports the newest versions of Swift.
But again, it’s still new. So if you like the support of all modern IDEs, consider sticking with Objective-C.
AppCode is another option to consider that’s also compatible with Swift and has tools to support this new language.
It’s just not as popular as Xcode.
Objective-C has a superior runtime compared to Swift. It’s probably going to be several years before Swift can catch up.
If you’re using powerful SDKs, Objective-C is also your best option here as well.
I’d still recommend that new developers start off learning Swift. It’s the safer option in terms of stability and the ability to handle errors.
APIs, future-proofing, and C++
Objective-C is a better language if you’re planning to make an app that’s going to use foundation APIs such as:
But with that said, Swift has very smooth memory management and wrappers.
However, c-based functions and C APIs both work better with Objective-C. So you’ll have to take these points into consideration based on what your project calls for.
I’d say that Swift is the best for future-proof projects. There is a ton of open source resources for Cocoa projects associated with Swift.
I can’t say for sure, but I’d say within the next three to five years, Swift will be at the same level or potentially even surpass Objective-C.
Look how high Swift ranks on the list of programming languages that developers plan to learn moving forward.
It’s hard to look at this graphic and not refer to Swift as Apple’s programming language of the future.
There are also lots of new blogs, articles, and online tutorials out there making it even easier for new developers to learn how to use Swift.
I can only speculate, but ten years from now, Swift may be in a place where new developers won’t even need to understand Objective-C.
Something else to keep in mind is that C++ is not compatible with Swift. You can’t import these into Swift files.
So if you’ve already got code written with C++ libraries, you better stick with Objective-C, or you’ll have lots of headaches trying to create wrapper classes or bridging the extra overhead.
It’s not worth the time.
Switching during an existing project
So let’s say you’re in the middle of a project and after reading all of this information you’re considering switching. Should you do it?
You can actually use both languages.
If you’re working on a project that’s written in Objective-C, you create a bridging header file in Xcode for your Swift language.
But attempting this will depend on the size of your project.
For those of you who are in the middle of a small project and want to switch, it’s reasonable.
If you want to switch the language for a big project, I’d recommend converting a little bit at a time. Trying to do it all in one shot can leave your project susceptible to errors and glitches.
It’s easier to identify and fix any problems if you just focus on a small portion at a time.
So, back to the initial question, which one is better?
You’ll have to decide for yourself.
Objective-C is older and currently more popular. It’s a little bit more difficult to learn, but the majority of developers out there know how to use it.
Swift is still new, but it’s making progress fast. It’s perceived as a safer option compared to Objective-C, and it’s easier to learn. But with that said, it’s still not the best choice for large projects.
There are certain circumstances where you may lean towards one language over the other based on your experience, your team’s familiarity, or the size and timeline of your project.
Don’t forget to weigh out the pros and cons of your tooling support, stability, runtime, and APIs.
All of these elements need to be taken into consideration when you’re deciding which language to go with.
Regardless of what you decide, I think that Swift is the programming language of the future. So if you haven’t learned it yet, see if you can find the time to figure it out soon.
Which programming language are you planning to use for your next project?