The Good and the Bad of Swift Programming Language
With more than 1 billion devices in use as of January, 2016, iOS is the world’s second most popular mobile platform. In some regions, including the USA, the UK, and France, Apple devices continue to outperform Android in smartphone sales numbers. That is why so many businesses focus their software products primarily and sometimes solely on the iOS platform as a key investment opportunity and strategic benefit.
If you are one of those smart business owners following the iOS app development path, probably the most important decision you will make is choosing the right tech stack for your product. If you decide to go for native development instead cross-platform solutions, you still have to decide which language to use: the good old Objective-C or brand-new Swift.
What is Swift and why should you use it?
Swift is a compiled programming language for iOS, macOS, watchOS, tvOS, and Linux applications. Here’s what you need to know about Swift.
Created by Apple in 2014. Backed up by one of the most influential tech companies in the world, Swift is set to become the dominant language for iOS development and beyond.
Open source. Swift creators acknowledged the fact that in order to build a defining programming language, the technology needs to be open for all. So, within its three years of existence, Swift acquired a large supportive community and an abundance of third-party tools.
Safe. Its syntax encourages you to write clean and consistent code which may even feel strict at times. Swift provides safeguards to prevent errors and improve readability.
Fast. Swift was built with performance in mind. Not only does its simple syntax and hand-holding help you develop faster, it also lives up to its name: as stated on apple.com, Swift is 2.6x faster than Objective-C and 8.4x faster than Python.
In demand. As of March 2018, it’s 12th most popular language, surpassing Objective-C, Go, Scala, and R. With more than 40K stars on GitHub and 187K StackOverflow questions, this young language is rightfully becoming one of the dominant technologies in the industry.
Keep reading to learn more about the technology or visit the following links if you want to jump right into development with Swift:
Download and read documentation on Official Swift Community website
Download Xcode IDE to get started with Swift on macOS
Visit Swift repository on GitHub to contribute or dive into technical details of the language use
Learn Swift via interactive Swift Playgrounds on iPad
Connect with fellow developers by asking and answering Swift questions on StackOverflow
A Brief History of Swift Language
2013-2014 – creation and launch
First introduced at Apple’s 2014 Worldwide Developers Conference (WWDC), Swift programming language has generated considerable debate ever since. Chris Lattner, Apple’s Senior Director, Developer Tools Department, started designing the basic concepts of the new language back in 2010.
“Initially, it was really just me messing around and nobody knew about it because it wasn’t anything to know about. But eventually, it got a little bit more serious […] So I started talking to my management and some of the engineers that were working on Clang, and they seemed excited about it. We got a couple people working on it part-time and I convinced my manager that it was interesting enough that we could have a couple of people work on it.”
– Chris Lattner for Accidental Tech Podcast, January, 2017
It wasn’t until 2013 that the team was able to solve a strategic question about how the new language would fit in with the existing Objective-C ecosystem. Forcing all iOS developers to move to a new language could have had a major disruptive effect on the community. So, the company decided to continue investing in Objective-C while also committing to the development of a new “safe programming language.”
One year later, the registered Apple developers were able to lay their hands on the beta version of the new language. In the first month post its release as a part of Xcode tools, it was downloaded over 11 million times, according to Tim Cook.
The initial reactions to Swift were mixed at best. Some developers were delighted with its features, flexibility, and simplicity, while others criticized it. Yet, most of them agreed that it was too early for Swift to be used in production. The language was evolving fast: major changes were introduced with every new release.
This, however, didn’t prevent Swift from becoming the “most loved” technology, according to the 2015 StackOverflow Developer Survey.
At the same time, the language was listed among top 10 “most wanted” technologies.
2015 – turning open source
Since Apple decided to make Swift an open sourced language in 2015, its growth has been tremendous. Over 60,000 people took a clone of the Swift project in the first week after the announcement. Now, 2 years later, Swift is officially the fastest growing language in history, according to TIOBE Index: The language reached the top 10 in March, 2017.
Being free and open to all, the language is growing rapidly with rapidly with its last version, Swift 4.0, released September 2017. The language is actively deployed in iOS development, when building desktop apps for OSX, or even as a server-side technology, thanks to IBM.
One of the reasons that Swift has become so popular over such a short period is probably the fact that it was made by Apple. When a company with such global name recognition and a multimillion army of loyal followers does something, the chances are it is doomed for success (or at least good press coverage).
Now, let’s take a closer look at the critical benefits and drawbacks that accompany Swift. What should you know about this language? Is it ready to be used in production? What are the risks involved in building a Swift app? We start with advantages that make it the darling of developers.
Pros of Using Swift for iOS Native Development
Often referred to as “Objective-C, without the C,” Swift language is in many aspects superior to its predecessor. To get an in-depth comparison of Swift and Objective C, check our separate article. According to the official press release, “Swift combines the performance and efficiency of compiled languages with the simplicity and interactivity of popular scripting languages.” Leaving technology details and marketing aside, let’s see what it really means from a business perspective.
Rapid development process
A clean and expressive language with a simplified syntax and grammar, Swift is easier to read and write. It is very concise, which means less code is required to perform the same task, as compared to Objective-C. Automatic Reference Counting (ARC) does all the work tracking and managing the app’s memory usage, so developers don’t need to spend time and effort doing that manually. Accordingly, it usually takes less time to build iOS apps with Swift.
A shining example of this advantage is the new Lyft app: The company completely re-wrote its iOS app using Swift. While the old codebase consisted of about 75,000 lines of code, the Swift version recreated the same functionality with less than a third of that. Moreover, the app now featured a new onboarding process: While the old one took more than a month and multiple engineers to implement, the new onboarding with Swift was completed within a week with only one engineer.
Easier to scale the product and the team
In addition to faster development time, you get a product that is future-proof and can be extended with new features as needed. Thus, Swift projects are typically easier to scale. The fact that Apple is more likely to support Swift than Objective-C should also get serious consideration for long-term investment.
Moreover, Swift allows you to add more developers to your team if needed: The onboarding is relatively fast due to the simplicity and conciseness of the codebase.
Improved safety and performance
As suggested by its name, Swift is made to be… well, swift. With a focus on performance and speed, the language was initially designed to outperform its predecessor. Namely, the initial release claimed a 40 percent increase in performance, as compared to Objective-C. Over the years, multiple benchmarks and tests conducted by individual developers have proved that. Moreover, there are many ways to optimize Swift code for even better performance.
Image source – AppleInsider Live Blog
Another of Swift’s strengths is its safety. Its strong typing system and error handling prevents code crashes and errors in production. Thus, Swift has a shorter feedback loop, allowing you to see the errors in the code instantly and fix them on the fly, greatly reducing the time and effort needed for bug fixing and eliminating the risks of deploying low quality code.
Decreased memory footprint
When you build an app, you use a lot of third-party code – reusable and often open source frameworks or libraries compiled into your app’s code. These libraries can be static and dynamic (or shared). Swift first introduced dynamic libraries to iOS when it launched. You can probably guess that static libraries are locked into code at the time you compiled them, become the part of your executable file, thus increasing its size and load time. They also can’t be automatically updated since they’re stuck in the version you compiled at. Dynamic libraries, on the other hand, exist outside of your code and are uploaded only when needed. Static libraries need to have copies in all files of your program while dynamic ones only need one.
Though it takes more time to reach for the dynamic code from the outside than call to it when it’s already included, you have a choice to keep using static libraries when you want to isolate apps that are not supposed to be shared.
Interoperability with Objective-C
As Jordan Morgan, iOS developer at Buffer, wrote in his Medium post, “[…] swift is the new toy and marked as the future. Objective-C is showing its age and will, eventually, be much less prevalent. But in the here and the now, the two must learn to coexist peacefully.” Accordingly, there are two possible scenarios for using both in the same project: You either add new features in Swift to the existing Objective-C codebase, or use Objective-C elements in your new Swift project.
Either way, Swift language is perfectly compatible with Objective-C and can be used interchangeably within the same project. This is especially useful for large projects that are being extended or updated: You can still add more features with Swift, taking advantage of the existing Objective-C codebase. Thus, the porting process becomes easier and more risk-free.
Automatic memory management
Swift uses Automatic Memory Counting (ARC) – a technology aimed to add a garbage collector function that wasn’t introduced to iOS before. Languages like Java, C#, and Go use garbage collectors to delete class instances that are no longer used. They are useful to decrease your memory footprint but can add up to 20 percent to CPU. Before ARC, iOS developers had to manage memory manually and constantly manage retain counts of every class. Swift’s ARC determines which instances are no longer in use and gets rid of them on your behalf. It allows you to increase your app’s performance without lagging your memory or CPU.
Full stack potential and cross-device support
Moreover, Swift provides out-of-the-box support not only for iPhones and iPads, but for all Apple devices, including Apple TV, Apple Watch, and Mac. Aside from that, there is already support for Linux, and an intention to officially port it to the Windows platform. There were even some rumors that Google will drop Java in favor of Swift as a first-class language for Android development. However, the recent announcement from Google I/O shows that Kotlin is the future of Android.
Vibrant open source community and learnability
The next version of the language, Swift 5.0, will launch in late 2018, and many of the expecting features will solve most current issues such as callback-heavy code and problematic Cocoa SDK integration – Apple’s API originally created for Objective-C. The company’s persistent work towards making Swift not only the main language for all Apple devices, but also for building web servers, Linux, and Android applications, proves that it will become one of the most popular technologies on the market.
As Apple’s Senior VP of Software Engineering, Craig Federighi, mentioned “We saw open sourcing as a critical element to make Swift reach its potential to be the language, the major language for the next 20 years of programming in our industry.”
Indeed, with the strong corporate support from Apple and IBM, Swift has quickly gained one of the most active and vibrant open source communities. The adoption trends, mentioned earlier are the case in point. Besides, Swift is currently the most starred language on GitHub, followed by Google’s Go.
For such a young language, Swift sure has an abundance of resources to help developers accelerate adoption. Apart from official e-books, there are tons of community guidelines, podcasts, online and even real-life courses, third-party apps, and of course Swift Playgrounds – a gamified learning experiences from Apple.
Source – github.com
The Cons of Swift Programming Language
While there seem to be so many reasons to love Swift, the language is still far from perfect. Many developers and business owners are overly cautious when it comes to switching to the new language. There are several reasons for that.
The language is still quite young
Swift might be the fastest and most powerful language in the world, but still too young. It has many issues that need to be addressed and “growing pains” to experience. After all, three years is too little time for any language to mature, even if it is Swift.
Moreover, Swift still has a very limited number of “native” libraries and tools: Many of the available resources and tools dedicated to earlier Swift versions are useless with the newer releases.
Swift is considered a “moving target”
That said, it follows that Swift is often considered to be unstable due to the major changes that are introduced with every new release. One of the key problems articulated by many developers is the lack of backward compatibility with the older language versions. Consequently, developers are forced to completely rewrite their projects if they want to switch to the latest Swift version.
While Xcode provides a tool to help developers update their Swift code to newer versions, it doesn’t fix all the issues. Thus, porting your project to a newer Swift version can be time consuming and costly. The latest update of Xcode IDE along with Swift 4.0 have partially solved this problem by supporting all versions starting from Swift 3.2. You can also compile each target separately in case some third-party libraries haven’t updated yet. Though you’ll still have to do some manual updating to your code – Apple’s SDK has gone through some changes too. If you have a very large project or a project that you don’t plan to update too often, Swift might be not the best option for you, at least for now.
Limited talent pool
While the Swift community is growing fast, it is still significantly smaller as compared to any other open source language. According to the latest StackOverflow Developer Survey, only 8.1 percent of the 78,000 respondents use Swift. At the same time, Upwork.com, a global freelance marketplace, finds that the demand for Swift programmers is growing, which might result in a talent gap.
While there are not many Swift developers out there, even fewer of them have decent hands-on experience with the language. There is probably only one person who has such experience with Swift, but Tesla already snagged that player for their roster.
Poor interoperability with third-party tools and IDEs
Largely due to frequent updates and lacking backward compatibility, as mentioned above, it is often hard to find the right tools to help with the certain tasks. Moreover, the official Apple IDE, XCode, lags in terms of tooling and support for Swift. Developers often report issues with syntax highlighting, autocomplete, refactoring tools, and compilers.
Lack of support for earlier iOS versions
You can only use Swift in the apps that target iOS7 and later. That said, Swift can’t be used for legacy projects running on older versions of the operating system.
However, per recent research, less than 5% of Apple devices currently run on iOS6 or earlier.
Source – david-smith.org
IDEs to be used with Swift
IDE (Integrated Development Environment) is the main point of the interaction with the language. Here we’ll discuss IDEs that can be used for Swift.
Atom. Atom text editor and IDE was created by GitHub. It shines if you combine plain iOS development with other platforms and languages. While Atom itself is basic, it has a great number of open source packages built by the GitHub community which will allow you to customize the IDE for cross-platform and versatile development with autocompletion, advanced navigation, and other useful features.
AppCode. This IDE for iOS and macOS developers was designed by JetBrains. The product is aimed at improving development performance by providing some refactoring tools similar to those available in Android Studio. And this perhaps is one of the main reasons why you might consider AppCode over Xcode. Unfortunately, AppCode still has limited functionality with Swift compared to Xcode, lacking storyboards, app validation, and submission. On top of that, AppCode comes with a subscription fee.
While you can also consider Visual Studio and some other IDEs for Swift these three are on the list to check first as each one of them provides unique benefits of working with this language.
Objective-C over Swift? Comparing use cases
A big part of making a choice between programming languages is your team’s experience and programming preferences. If you have developers skilled at Objective-C, having them all migrate to Swift may not be an option. Let’s unpack in which cases you might want to stick with Objective-C over Swift.
Old OS versions support
Being a new language, Swift supports only iOS 7 and macOS 10.9 or higher. If you have a reason to build apps that should run on older versions, you don’t have other choice rather than using Objective-C.
Learning a language, even a simple one like Swift, takes time and effort that many projects lack. If you don’t have a luxury of postponing your app release until members of your team get comfortable with Swift, you should consider sticking to ObjC. In case the time allows, learning Swift would definitely be beneficial in the long run, considering that Apple doesn’t plan to stop its development.
Big project size
Swift is young, which is why smaller apps can get around updates much easier. In the cons section, we mentioned that rewriting your program with each version release may be a struggle, so until this issue is fully fixed, you wouldn’t want to risk long lists of changes.
Using C or C++ third-party frameworks
Being a superset of C, Objective-C allows you to comfortably and smoothly use C and C++ libraries. While the need to exclusively import C++ files is a rare case, you should be aware that Swift doesn’t have that supported.
Can Swift Be the Future of iOS Development?
Despite its tender age and the attendant controversy, Swift already has a number of prominent success stories. Some of the companies that chose the new language are Lyft, LinkedIn, Coursera, Pandora, Vimeo, Twitter, Fitbit, and Groupon. Moreover, Facebook and Uber are reported to have shown significant interest in Swift.
With the new, purportedly more stable version of Swift scheduled for release later this year, many of the listed drawbacks will hopefully be addressed. Thus, Swift adoption will continue to grow, which soon might lead to a complete displacement of Objective-C as the leading first-class language for iOS mobile application development.
For business owners, it is crucial to be ready for any changes the market might impose. Thus, preparing to switch to the new language with minimum effort and at a reasonable cost should be one of the key strategies for the near future.
This post is a part of our “The Good and the Bad” series. For more information about the pros and cons of the most popular technologies, see the other articles from the series: