Toptal is a marketplace for top Swift developers, engineers, programmers, coders, architects, and consultants. Top companies and startups can hire Toptal dedicated (full-time), hourly, or part-time Swift freelancers for their mission-critical software projects.
CroatiaFreelance Swift Developer at Toptal Since July 25, 2016
As a software engineer with over a decade of experience, Josip has developed a keen sense of building scalable, maintainable, and user-friendly applications. His platform of choice is iOS for which he has designed and developed a wide range of applications, from simple ones to complex, large-scale applications. Josip is a proven team leader and a team player with exemplary communication and social skills.
United StatesFreelance Swift Developer at Toptal Since January 7, 2015
Ryan is a senior-level iOS and web developer passionate about creating amazing user interfaces and experiences. He's very comfortable working anywhere in the development stack and has 10+ years of doing it. He's well-spoken, very easy to communicate with, quick to respond, and excels at figuring out optimal solutions for any challenge you present. Ryan has an entrepreneurial drive and understands the challenges startups face.
NetherlandsFreelance Swift Developer at Toptal Since May 10, 2016
With 15+ years of success building great digital products around the world, Josh leads with compassion and by example. He will jump in the trenches with the rest of the team whenever needed and bring clear strategy to help us steer safely through the turbulent waters of the digital sea. Josh's tools of choice are evidence, empathy, clear and dynamic communication, and a growth mindset.
United StatesFreelance Swift Developer at Toptal Since August 1, 2016
Paul has been a professional software developer for over 30 years—predominantly as a freelancer on a wide range of projects with a focus on native mobile iOS and Android app development. Paul is diligent, communicates well, and loves solving hard problems.
United StatesFreelance Swift Developer at Toptal Since October 16, 2013
Rinat is a technical iOS lead with over ten years of iOS development experience. He has worked with REST-based APIs, social media integration, geolocation, core animation, and full control customization. Rinat has a strong product app development vision.
SlovakiaFreelance Swift Developer at Toptal Since January 27, 2015
Andrej is a software developer and architect. He has extensive experience with PHP, JavaScript, HTML, and CSS and enjoys working on both the front and back end. He likes creating modern websites and developing real-time scalable web applications with Node.js.
GermanyFreelance Swift Developer at Toptal Since June 1, 2017
Oleksandr is a senior iOS engineer with over 13 years of experience in software development for mobile and tablet devices. Oleksandr is dedicated to continuously discovering, evaluating, and implementing new technologies to maximize development efficiency.
United StatesFreelance Swift Developer at Toptal Since January 8, 2016
Darion is a research scientist pursuing a PhD in computer engineering with a focus in security. He has published papers at top security conferences and has over four years of experience developing applications in JavaScript and Python. Darion has worked for organizations like Facebook, the Center for Open Science, NASA, Rackspace, CommVault, and Bristol-Myers Squibb, and has experience managing small and large teams.
HungaryFreelance Swift Developer at Toptal Since October 29, 2015
As a user experience enthusiast, Zoltan's greatest strength as an engineer is his precise design implementation. He has a positive attitude and an open mindset that enable him to bring the best quality projects to life. Zoltan's experience in maintaining a relationship with customers and managing team workflow help him to provide the best overall value to his team.
BelarusFreelance Swift Developer at Toptal Since March 5, 2018
Sergey is a senior iOS developer with more than four years of software development experience writing highly readable, clean, maintainable source code. He has worked with various technology stacks: REST and socket APIs, social media integration, geolocation, audio/image/video processing, complex UI, and animation customizations.
SpainFreelance Swift Developer at Toptal Since March 25, 2019
Petru is a developer who's spent the last 14 years in the mobile industry, publishing 100+ apps in the App Store. To any project, he brings in-depth knowledge of SDKs/libraries and iOS hardware/software, exceptional OOP skills, solid Node.js knowhow, and hands-on experience with RESTful web services in mobile apps. Besides his technical expertise, he’s also comfortable with Agile workflows, working with Git, and thrives in a team environment.
Swift is a general purpose, multi-paradigm, compiled programming language developed by Apple. It is powerful, intuitive, and applicable to broad range of platforms, including mobile devices, watches, desktops, and the cloud. Thanks to being open-sourced, it became popular very quickly. Swift's code is easy, interactive and fun. The syntax is concise yet expressive, applications are safe by design, and run very fast.
... allows corporations to quickly assemble teams that have the right skills for specific projects.
Despite accelerating demand for coders, Toptal prides itself on almost Ivy League-level vetting.
Our clients
Creating an app for the game
Leading a digital transformation
Building a cross-platform app to be used worldwide
Drilling into real-time data creates an industry game changer
What our clients think
Clients Rate Toptal Swift Developers4.4 / 5.0on average across 861 reviews as of Mar 28, 2024
Testimonials
Tripcents wouldn't exist without Toptal. Toptal Projects enabled us to rapidly develop our foundation with a product manager, lead developer, and senior designer. In just over 60 days we went from concept to Alpha. The speed, knowledge, expertise, and flexibility is second to none. The Toptal team were as part of tripcents as any in-house team member of tripcents. They contributed and took ownership of the development just like everyone else. We will continue to use Toptal. As a startup, they are our secret weapon.
Brantley Pace, CEO & Co-Founder
Tripcents
I am more than pleased with our experience with Toptal. The professional I got to work with was on the phone with me within a couple of hours. I knew after discussing my project with him that he was the candidate I wanted. I hired him immediately and he wasted no time in getting to my project, even going the extra mile by adding some great design elements that enhanced our overall look.
Paul Fenley, Director
K Dunn & Associates
The developers I was paired with were incredible -- smart, driven, and responsive. It used to be hard to find quality engineers and consultants. Now it isn't.
Ryan Rockefeller, CEO
Radeeus
Toptal understood our project needs immediately. We were matched with an exceptional freelancer from Argentina who, from Day 1, immersed himself in our industry, blended seamlessly with our team, understood our vision, and produced top-notch results. Toptal makes connecting with superior developers and programmers very easy.
Jason Kulik, Co-Founder
ProHatch
As a small company with limited resources we can't afford to make expensive mistakes. Toptal provided us with an experienced programmer who was able to hit the ground running and begin contributing immediately. It has been a great experience and one we'd repeat again in a heartbeat.
Stuart Pocknee , Principal
Site Specific Software Solutions
We used Toptal to hire a developer with extensive Amazon Web Services experience. We interviewed four candidates, one of which turned out to be a great fit for our requirements. The process was quick and effective.
Abner Guzmán Rivera, CTO and Chief Scientist
Photo Kharma
Sergio was an awesome developer to work with. Top notch, responsive, and got the work done efficiently.
Dennis Baldwin, Chief Technologist and Co-Founder
PriceBlink
Working with Marcin is a joy. He is competent, professional, flexible, and extremely quick to understand what is required and how to implement it.
André Fischer, CTO
POSTIFY
We needed a expert engineer who could start on our project immediately. Simanas exceeded our expectations with his work. Not having to interview and chase down an expert developer was an excellent time-saver and made everyone feel more comfortable with our choice to switch platforms to utilize a more robust language. Toptal made the process easy and convenient. Toptal is now the first place we look for expert-level help.
Derek Minor, Senior VP of Web Development
Networld Media Group
Toptal's developers and architects have been both very professional and easy to work with. The solution they produced was fairly priced and top quality, reducing our time to launch. Thanks again, Toptal.
Jeremy Wessels, CEO
Kognosi
We had a great experience with Toptal. They paired us with the perfect developer for our application and made the process very easy. It was also easy to extend beyond the initial time frame, and we were able to keep the same contractor throughout our project. We definitely recommend Toptal for finding high quality talent quickly and seamlessly.
Ryan Morrissey, CTO
Applied Business Technologies, LLC
I'm incredibly impressed with Toptal. Our developer communicates with me every day, and is a very powerful coder. He's a true professional and his work is just excellent. 5 stars for Toptal.
Pietro Casoar, CEO
Ronin Play Pty Ltd
Working with Toptal has been a great experience. Prior to using them, I had spent quite some time interviewing other freelancers and wasn't finding what I needed. After engaging with Toptal, they matched me up with the perfect developer in a matter of days. The developer I'm working with not only delivers quality code, but he also makes suggestions on things that I hadn't thought of. It's clear to me that Amaury knows what he is doing. Highly recommended!
George Cheng, CEO
Bulavard, Inc.
As a Toptal qualified front-end developer, I also run my own consulting practice. When clients come to me for help filling key roles on their team, Toptal is the only place I feel comfortable recommending. Toptal's entire candidate pool is the best of the best. Toptal is the best value for money I've found in nearly half a decade of professional online work.
Ethan Brooks, CTO
Langlotz Patent & Trademark Works, Inc.
In Higgle's early days, we needed the best-in-class developers, at affordable rates, in a timely fashion. Toptal delivered!
Lara Aldag, CEO
Higgle
Toptal makes finding a candidate extremely easy and gives you peace-of-mind that they have the skills to deliver. I would definitely recommend their services to anyone looking for highly-skilled developers.
Michael Gluckman, Data Manager
Mxit
Toptal’s ability to rapidly match our project with the best developers was just superb. The developers have become part of our team, and I’m amazed at the level of professional commitment each of them has demonstrated. For those looking to work remotely with the best engineers, look no further than Toptal.
Laurent Alis, Founder
Livepress
Toptal makes finding qualified engineers a breeze. We needed an experienced ASP.NET MVC architect to guide the development of our start-up app, and Toptal had three great candidates for us in less than a week. After making our selection, the engineer was online immediately and hit the ground running. It was so much faster and easier than having to discover and vet candidates ourselves.
Jeff Kelly, Co-Founder
Concerted Solutions
We needed some short-term work in Scala, and Toptal found us a great developer within 24 hours. This simply would not have been possible via any other platform.
Franco Arda, Co-Founder
WhatAdsWork.com
Toptal offers a no-compromise solution to businesses undergoing rapid development and scale. Every engineer we've contracted through Toptal has quickly integrated into our team and held their work to the highest standard of quality while maintaining blazing development speed.
Greg Kimball, Co-Founder
nifti.com
How to Hire Swift Developers through Toptal
1
Talk to One of Our Industry Experts
A Toptal director of engineering will work with you to understand your goals, technical needs, and team dynamics.
2
Work With Hand-Selected Talent
Within days, we'll introduce you to the right Swift developer for your project. Average time to match is under 24 hours.
3
The Right Fit, Guaranteed
Work with your new Swift developer for a trial period (pay only if satisfied), ensuring they're the right fit before starting the engagement.
Find Experts With Related Skills
Access a vast pool of skilled developers in our talent network and hire the top 3% within just 48 hours.
At Toptal, we thoroughly screen our Swift developers to ensure we only match you with talent of the highest caliber. Of the more than 200,000 people who apply to join the Toptal network each year, fewer than 3% make the cut. You’ll work with engineering experts (never generalized recruiters or HR reps) to understand your goals, technical needs, and team dynamics. The end result: expert vetted talent from our network, custom matched to fit your business needs.
Can I hire Swift developers in less than 48 hours through Toptal?
Depending on availability and how fast you can progress, you could start working with a Swift developer within 48 hours of signing up.
What is the no-risk trial period for Toptal Swift developers?
We make sure that each engagement between you and your Swift developer begins with a trial period of up to two weeks. This means that you have time to confirm the engagement will be successful. If you’re completely satisfied with the results, we’ll bill you for the time and continue the engagement for as long as you’d like. If you’re not completely satisfied, you won’t be billed. From there, we can either part ways, or we can provide you with another expert who may be a better fit and with whom we will begin a second, no-risk trial.
Share
How to Hire a Great Swift Developer
The Challenge
Swift has been diligently working on overtaking Objective-C since its introduction in 2014. As Objective-C’s successor to the iOS app throne, it has all that a new generation programming language should have. It’s intuitive, interactive, safer, faster, more reliable, time saving, and free. Swift is designed to work with iPads, iPhones, and all other Apple devices and to be fully compatible with Cocoa and Cocoa Touch frameworks.
The original strategy was to make developers migrate to the new language on their own just by showcasing all its perks. However, the first version of Swift was rather unstable, buggy, and not fully compatible with Xcode.
The breaking point was in December 2015 when Apple’s strong preference for its newborn child was demonstrated by making it open source, and releasing the new big version with patches and updates. Swift 2 has been stable enough to be used safely in applications, which secured its place as the number one language of choice for watchOS, tvOS, and iOS development.
Although Swift development saw the light of day only two years ago, there is already a large community of developers who are considered to be experts on the topic. However, the difference between a developer and a great developer is their ability to adapt, learn, and keep pace with the rest of the world. Since Swift is facing a bright future, and there will certainly be many new updates coming each year, a great developer has to be on top of the evolutionary curve all the time. Finding such a talent to hire is not an easy task. So, this article offers a sampling of questions that are crucial to evaluating the breadth and depth of a candidate’s mastery of Swift.
Questions and Answers
Q: Describe Swift. What kind of a language is it? What are its main perks?
Swift is a compiling language whose source code is translated to machine code. It’s fully compatible with its predecessor Objective-C, and with Apple’s Cocoa framework. By open-sourcing the language, Apple made its vision clear that Swift is to be much more than only a language for mobile applications. New frameworks, like Perfect, are first attempts to make Swift a server side language too. The result will be that Swift developers and full-stack developers will have the power to create client and server side applications using the same language.
To mention some of the main advantages of Swift:
Optional Types, which make applications crash-resistant
Built-in error handling
Closures
Much faster compared to other languages
Type-safe language
Supports pattern matching
Q: Explain the main differences between classes and structures in Swift programming.
Classes and structures are the very basic building blocks for the majority of programming languages. However, there is a difference between them. To leverage them fully in Swift, we need to be aware of all the possibilities they offer. There are certain principles every developer should know and adhere to.
Let’s start with attributes that classes and structures have in common:
Both conform to protocols to standardize functionality to a particular purpose, the interface.
Both can extend their functionality to add additional methods without modifying the original class or structure.
However, more important than knowing what they have in common is to know how they differ:
Classes are reference types - they are not copied when they are assigned to a different property, nor when they are being passed to a function.
Structures are much faster. Class instances are allocated on the heap, while structure instances are on the stack.
Structures do not support inheritance.
Structures provide default initializers for all properties which don’t have a default value:
struct Person {
let name: String
}
let patrik = Person(name: "Patrik")
let patrik2 = Person() // does not compile, name property needs a value
Q: Explain generics in Swift.
Complex applications require clean code without any duplication. Here, generics come in handy as they can help us to avoid unnecessary duplication. In general, generics are considered as one of the most sophisticated features of Swift, and they should be used as much as possible. They enable us to write classes and methods without specifying the types they use. Swift uses generics internally wherever it is possible.
Let’s have a look on one of the best example, arrays, as they can store any types. In our example, we will implement a simple data structure, Queue, to demonstrate how powerful and useful generics can be:
class Queue<T> {
private var data = [T]()
func enqueue(item: T) {
data.append(item)
}
func dequeue() -> T? {
return data.count == 0 ? nil : data.removeFirst()
}
}
let q = Queue<Int>()
Here, we removed the need to create Queue for other types that we would use in the application later. Our Queue can contain any type, and we were able to define it in one place. It saved us a lot of time that would be otherwise spent on setting the Queue each time later.
Q: Explain the lazy keyword.
An initial value of the lazy stored properties is calculated only when the property is called for the first time. There are situations when the lazy properties come very handy to developers. Imagine that the property needs a significant time for initialization, like when instantiating an array of controllers for storyboards used for UIPageViewControllers.
class MyController: UIPageViewController {
lazy var myControllers: [UIViewController] = {
print("initialization")
guard let storyboard = self.storyboard else { return [] }
let controller1 = storyboard.instantiateViewControllerWithIdentifier("Controller1")
let controller2 = storyboard.instantiateViewControllerWithIdentifier("Controller2")
let controller3 = storyboard.instantiateViewControllerWithIdentifier("Controller3")
return [controller1, controller1, controller1]
}()
override func viewDidLoad() {
super.viewDidLoad()
let _ = myControllers
let _ = myControllers
}
}
In our example, we called myControllers two times in viewDidLoad (it is just for testing purposes, to see how the initialization works). Our lazy variable contains a print statement to demonstrate what’s happening under the hood. After calling two times let _ = myControllers, there is only one message in a console log. That’s because the second time lazy variable is already initialized, and there is no need to do it once again.
Q: Discuss how to pass a variable as a reference.
Before getting into the discussion, we need to mention that there are two types of variables: reference and value types. The difference between these two types is that by passing value type, the variable will create a copy of its data, and the reference type variable will just point to the original data in the memory.
In Swift, all class instances are reference types. A variable with a class object is just a pointer to the memory. The same applies for functions as parameters. Consider the example:
class A: CustomStringConvertible {
var name = "Patrik"
var description: String {
return name
}
}
func changeName(object: A) {
object.name = "Thomas"
}
let myObject = A()
changeName(myObject)
print(myObject) // Thomas
Here, an instance myObject is passed to the changeName function, and there is no need to mark parameters as reference types. Instead, we simply need to know some rules about how they behave when used with different parameter types. In this case, the print(myObject) will write “Thomas”.
Structures, Arrays, Strings, and Dictionaries are value types. To achieve a similar effect, to pass a variable to a function as a reference type, we need to add inout keyword before the parameter’s declaration and ampersand before the variable. Let’s consider a similar example:
Q: Explain what defer is, and when you should to use it.
Swift 2 introduced the new defer keyword which provides a block of code that will be executed when the outer block is going to be finished. We could say that defer block will be executed in the case when execution is leaving the current scope. Consider the following code, and try to answer what the output will be.
func write() {
defer { print("end") }
print("start for loop")
for i in 0...5 {
print(i)
}
}
As we previously stated, the defer block will be executed at the end of the function even if it is declared in the first line of the write() function.
The output result will be:
start loop
0
1
2
end
Now, a little more complicated example:
func write() {
defer { print("end") }
print("start loop")
for i in 0...2 {
print(i)
defer { print("defer ", i) }
}
}
The output is:
start loop
0
defer 0
1
defer 1
2
defer 2
end
It’s worth noting that the defer statement in the “for loop scope” is executed after each iteration of the loop. That’s because defer’s parent scope is a loop scope.
Nesting defer block in if statements will do the same like in a for loop.
func write3(input: Int) {
if input > 0 {
print("the number is greater than zero")
defer { print("defer positive") }
}
print("input is ", input)
}
write3(10)
The output is:
the number is greater than zero
defer positive
input is 10
the number is greater than zero
defer positive
input is 10
Using defers can significantly help programmers to avoid duplication, but it is crucial to know defer’s behavior and when it’s executed. Simple print functions can verify whether the developer understands the issue.
Q: Why it is better to use higher order functions? Explain with examples.
Functions that take another function as a parameter, or return a function, as a result, are known as higher-order functions. Swift defines these functions as CollectionType. The very basic higher order function is a filter. It’s a function on the array which accepts another function that will be used to return a new filtered version of the array. The main purpose of the higher functions is to help us write code with fewer bugs and in less time. At first glance, these functions might be scary, but a good developer should use them as much as possible.
The fact that we can take one function and put it into another function allows us to compose a lot of small functions into bigger functions. If we are aware of that, the readability of the code will be much higher.
Let’s assume that we have an array of numbers. How can we select only those that are bigger than zero? A very simple approach is:
let numbers = [-10, 4, -3, 5]
var positive = [Int]()
for n in numbers {
if n > 0 {
positive.append(n)
}
}
print(positive) // [4, 5]
However, wouldn’t it be better to write less code and in a more elegant way?
let numbers = [-10, 4, -3, 5]
let positive = numbers.filter { (value: Int) -> Bool in
return value > 0
}
print(positive) // [4, 5]
In the code example above, filter function will loop over each value, and for each value, it will pass it to a callback function as the current value. A callback function will then return a Boolean value to determine whether this value should be in the output array or not.
Swift enables us to use a shorter version of closures by inferring the types of its parameters and the type of the value it returns. As a result, there is no need to write a full declaration when the function is directly passed as a parameter.
let numbers = [-10, 4, -3, 5]
let positive = numbers.filter { $0 > 0 }
print(positive) // [4, 5]
Swift also provides the map function which returns a new array containing of all the new mapped values and only with one line of code.
let numbers = [-10, 4, -3, 5]
let strings = numbers.map { String($0) }
print(strings) // ["-10", "4", "-3", "5"]
To sum all values in an array, there is a reduce higher order function to help us achieve it.
let numbers = [-10, 4, -3, 5]
let sum = numbers.reduce(0) { $0 + $1 }
print(sum) // -4
Q: What are the best practices to group application settings to make the project as clean as possible?
Every project includes some custom settings, like API keys, names of NSUserDefault keys, or a palette of used colors in the application. Small projects do not require any precise rules for this to work properly. We can simply use something like the following:
However, projects tend to grow, the design of the application will change, and we need a better system to group ‘’shared” data in one place. We need a way to change just one line of the code, like the application color, and have it propagate properly to the whole project.
There are multiple approaches to solving this problem. Let’s examine one possible solution:
struct Color {
static let appColor = UIColor(red: 34/255, green: 36/255, blue: 38/255, alpha: 1)
static let greyColor = UIColor(red: 131.8/255, green: 131.8/255, blue: 131.8/255, alpha: 1.0)
}
struct Settings {
struct NSUserDefaults {
static let isTutorialShown = "isTutorialShown"
}
struct APIKey {
static let fabric = "xxx"
}
}
By wrapping similar properties together, we can significantly reduce bugs, like using the same key in NSUserDefaults for two various properties. Additionally, this way provides us a spell check if we wrote the key correctly. Also, if we decide to remove some key or color, removing one line will inform us which files used that deprecated key. There are so many benefits for using all the keys in one place.
However, we know that creating Color or Settings struct in a global scope level is not the best approach, as it is like a global variable, which is a bad practice. We should put these settings into a wrapper, which is then directly connected with a type of item.
Leveraging Swift extensions can give us a sophisticated way how to group all the necessary settings and make the design cleaner. Creating one separate file for all extensions is also a good idea, and then we will get design changes much faster than by going through each of the files and changing colors manually.
Wrap Up
Answering questions we covered in this article should be a piece of cake for any top level Swift app developer. The truth is, the Swift language itself is not difficult to learn and use. However, keep in mind that whether your dedicated developer is good or not will be revealed during the time when more and more new updates are released and new features incorporated. Swift’s mastery is about being able to understand correctly and apply new application development principles in the shortest period possible to keep your application’s functionality in the lead.
We hope you find the questions presented in this post to be a solid foundation in your quest for the top Swift app development experts. Finding such high-quality candidates for part-time or full-time roles in the United States and abroad is well worth the effort, as they will undoubtedly have a significant positive impact on your team’s productivity and results.