Key features of the Swift programming language?

In this tutorial, you are about to learn about what is Swift, and what are the key features of the Swift programming language.

What is the Swift language?

Swift is a clean and concise programming language that is growing fast and becoming increasingly popular. Swift was initially used for iOS development but has become very popular for many other things like macOS, watchOS, and server-side development.

Basically, Apple introduced the Swift language as an open-source programming language as a replacement for Objective-C, C, and C++. The Swift language was created in 2014 and released publicly in 2015 by Apple Inc.

We can say Swift is a modern programming language like JavaScript, Kotlin, and Python. Its short syntax and easy readability make it a popular language, especially for Apple development. We can build apps for iOS 7+ and macOS 10.9+ versions.

What does Swift mean?

  • A safe and easy-to-use language.

  • Fast compared to other programming languages.

  • A clean and concise programming language.

  • Singular language for all platforms, not just iOS, but also macOS, watchOS, and tvOS.

  • Compatible with Linux and Windows servers

What are the key features of the Swift language?

Swift language has many features which make swift an easy, safe, and strong programming language compare to other languages. Let?s understand some of the key features of Swift language ?

Automatic Reference Counter (ARC)

In Swift, ARC determines which class instances are no longer in use and gets rid of them automatically. They are useful for reducing the memory footprint. Before ARC, developers had to manage memory manually and track reference counts for every class. ARC eliminates the need for developers to perform these tasks manually, which allows increased performance without lagging your memory.

Generics

In Swift, generics allow you to write flexible and reusable code that can work with any type. Using generics, we can write functions and types that are reusable and can work with any type.

Example

<div class="execute"></div><div class="code-mirror  language-javascript" contenteditable="plaintext-only" spellcheck="false" style="outline: none; overflow-wrap: break-word; overflow-y: auto; white-space: pre-wrap;"><span class="token keyword">class</span> <span class="token class-name">GenericExample</span><span class="token operator"><</span><span class="token constant">T</span><span class="token operator">></span> <span class="token punctuation">{</span>
   <span class="token comment">// property of T type</span>
   <span class="token keyword">var</span> data<span class="token operator">:</span> <span class="token constant">T</span>
   <span class="token function">init</span> <span class="token punctuation">(</span><span class="token parameter">data<span class="token operator">:</span> <span class="token constant">T</span></span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
      self<span class="token punctuation">.</span>data <span class="token operator">=</span> data
   <span class="token punctuation">}</span>
   
   <span class="token comment">// method that return T type variable</span>
   func <span class="token function">getData</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">-</span><span class="token operator">></span> <span class="token constant">T</span> <span class="token punctuation">{</span>
   <span class="token keyword">return</span> self<span class="token punctuation">.</span>data
   <span class="token punctuation">}</span>
<span class="token punctuation">}</span>

<span class="token comment">// initialize a generic class object with Int type</span>
<span class="token keyword">var</span> intObj <span class="token operator">=</span> GenericExample<span class="token operator"><</span>Int<span class="token operator">></span><span class="token punctuation">(</span>data<span class="token operator">:</span> <span class="token number">1620</span><span class="token punctuation">)</span>
<span class="token function">print</span><span class="token punctuation">(</span><span class="token string">"Generic Class returning: "</span><span class="token punctuation">,</span> intObj<span class="token punctuation">.</span><span class="token function">getData</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span>

<span class="token comment">// initialize a generic class object with String type</span>
<span class="token keyword">var</span> strObj <span class="token operator">=</span> GenericExample<span class="token operator"><</span>String<span class="token operator">></span><span class="token punctuation">(</span>data<span class="token operator">:</span> <span class="token string">"Tutorials Points"</span><span class="token punctuation">)</span>
<span class="token function">print</span><span class="token punctuation">(</span><span class="token string">"Generic Class returning: "</span><span class="token punctuation">,</span> strObj<span class="token punctuation">.</span><span class="token function">getData</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
</div><div class="output-wrapper"><div class="console-close"></div><div class="code-output"></div></div>

Output

Generic Class returning:  1620
Generic Class returning:  Tutorials Points

Tuples and Multiple Values Return

In Swift, tuples allow us to create and share value in groups. You can return more than one value from functions using a tuple. In other languages like the C language, you can return multiple values using pointers or structures but in Swift, you can return multiple values as a single entity. Remember that tuples are a fixed set of elements arranged in an ordered sequence.

Example

<div class="execute"></div><div class="code-mirror  language-javascript" contenteditable="plaintext-only" spellcheck="false" style="outline: none; overflow-wrap: break-word; overflow-y: auto; white-space: pre-wrap;"><span class="token comment">// returning multiple values into a single entity called a tuple.</span>
func <span class="token function">tupleExample</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">-</span><span class="token operator">></span> <span class="token punctuation">(</span>name<span class="token operator">:</span> String<span class="token punctuation">,</span> age<span class="token operator">:</span> Int<span class="token punctuation">,</span> score<span class="token operator">:</span> Double<span class="token punctuation">)</span> <span class="token punctuation">{</span>
   <span class="token keyword">return</span> <span class="token punctuation">(</span>name<span class="token operator">:</span> <span class="token string">"Sneha Sharma"</span><span class="token punctuation">,</span> age<span class="token operator">:</span> <span class="token number">25</span><span class="token punctuation">,</span> score<span class="token operator">:</span> <span class="token number">9.2</span><span class="token punctuation">)</span>
<span class="token punctuation">}</span>
<span class="token keyword">let</span> studentDetails <span class="token operator">=</span> <span class="token function">tupleExample</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token function">print</span><span class="token punctuation">(</span><span class="token string">"Student name: \(studentDetails.name), age: \(studentDetails.age), score: \(studentDetails.score)"</span><span class="token punctuation">)</span>
</div><div class="output-wrapper"><div class="console-close"></div><div class="code-output"></div></div>

Output

Student name: Sneha Sharma, age: 25, score: 9.2

Advance Control Flow

Swift provides some advanced features to control flow in addition to control transfer statements. These are such as a do statement to introduce scope, a guard statement to handle conditions and errors, a defer statement to run clean-up actions, and a repeat statement to allow us to do a task in repeat mode with a dependent condition.

Example of guard statement

<div class="execute"></div><div class="code-mirror  language-javascript" contenteditable="plaintext-only" spellcheck="false" style="outline: none; overflow-wrap: break-word; overflow-y: auto; white-space: pre-wrap;">func <span class="token function">guardExample</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
   <span class="token keyword">let</span> name<span class="token operator">:</span> String<span class="token operator">?</span> <span class="token operator">=</span> <span class="token string">"Amit Saxena"</span>
   guard <span class="token keyword">let</span> nameString <span class="token operator">=</span> name <span class="token keyword">else</span> <span class="token punctuation">{</span>
      <span class="token function">print</span><span class="token punctuation">(</span><span class="token string">"name is not found"</span><span class="token punctuation">)</span>
      <span class="token keyword">return</span>
   <span class="token punctuation">}</span>
   <span class="token function">print</span><span class="token punctuation">(</span><span class="token string">"Name found: \(nameString)"</span><span class="token punctuation">)</span>
<span class="token punctuation">}</span>
<span class="token function">guardExample</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
</div><div class="output-wrapper"><div class="console-close"></div><div class="code-output"></div></div>

Output

Name found: Amit Saxena

Closures unified with function pointers

Function pointers contain the address of a specific function and point to code vs. data. When using a function pointer, you signify a particular behavior by calling the function instead of writing code. Closures contain these function pointers. Swift?s nested functions mean that closures are unified with function pointers and can therefore take values from the functions enclosed within the closure.

Example

<div class="execute"></div><div class="code-mirror  language-javascript" contenteditable="plaintext-only" spellcheck="false" style="outline: none; overflow-wrap: break-word; overflow-y: auto; white-space: pre-wrap;"><span class="token keyword">let</span> names <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token string">"Amit"</span><span class="token punctuation">,</span> <span class="token string">"Sachin"</span><span class="token punctuation">,</span> <span class="token string">"Sonali"</span><span class="token punctuation">,</span> <span class="token string">"Rahul"</span><span class="token punctuation">]</span>
<span class="token keyword">let</span> reversedNames <span class="token operator">=</span> names<span class="token punctuation">.</span><span class="token function">sorted</span><span class="token punctuation">(</span>by<span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token punctuation">(</span>s1<span class="token operator">:</span> String<span class="token punctuation">,</span> s2<span class="token operator">:</span> String<span class="token punctuation">)</span> <span class="token operator">-</span><span class="token operator">></span> Bool <span class="token keyword">in</span>
   <span class="token keyword">return</span> s1 <span class="token operator"><</span> s2
<span class="token punctuation">}</span><span class="token punctuation">)</span>
<span class="token function">print</span><span class="token punctuation">(</span><span class="token string">"Reversed Names: \(reversedNames)"</span><span class="token punctuation">)</span>
</div><div class="output-wrapper"><div class="console-close"></div><div class="code-output"></div></div>

Output

Reversed Names: ["Amit", "Rahul", "Sachin", "Sonali"]

Powerful Structures

In Swift, structs are more powerful with additional features like protocols, extensions, and methods. These features are very significant and make structs more useful when making apps.

An example of the structure with protocol

<div class="execute"></div><div class="code-mirror  language-javascript" contenteditable="plaintext-only" spellcheck="false" style="outline: none; overflow-wrap: break-word; overflow-y: auto; white-space: pre-wrap;">protocol StudentCafeteriaAccess <span class="token punctuation">{</span>
   func <span class="token function">hasCafeteriaAccess</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">-</span><span class="token operator">></span> Bool
   func <span class="token function">requestForCafeteriaAccess</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token punctuation">}</span>
struct Student<span class="token operator">:</span> StudentCafeteriaAccess  <span class="token punctuation">{</span>
   <span class="token keyword">var</span> name<span class="token operator">:</span> String
   <span class="token keyword">var</span> grade<span class="token operator">:</span> Int
   
   <span class="token comment">// MARK: - StudentCafeteriaAccess Methods</span>
   func <span class="token function">hasCafeteriaAccess</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">-</span><span class="token operator">></span> Bool <span class="token punctuation">{</span>
      grade <span class="token operator">></span> <span class="token number">2</span> <span class="token operator">?</span> <span class="token boolean">true</span> <span class="token operator">:</span> <span class="token boolean">false</span>
   <span class="token punctuation">}</span>
   func <span class="token function">requestForCafeteriaAccess</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
      <span class="token comment">// write code for requesting Cafeteria Access</span>
   <span class="token punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token keyword">let</span> student1 <span class="token operator">=</span> <span class="token function">Student</span><span class="token punctuation">(</span>name<span class="token operator">:</span> <span class="token string">"Student 1"</span><span class="token punctuation">,</span> grade<span class="token operator">:</span> <span class="token number">8</span><span class="token punctuation">)</span>
<span class="token function">print</span><span class="token punctuation">(</span><span class="token string">"Name: \(student1.name) and grade: \(student1.grade)"</span><span class="token punctuation">)</span>
</div><div class="output-wrapper"><div class="console-close"></div><div class="code-output"></div></div>

Output

Name: Student 1 and grade: 8

Native Error Handling

In Swift, errors are thrown, caught, propagated, and handled at runtime.

Package Manager

In Swift 3.0+, Apple provides a tool called Swift Package Manager (SPM) that automates the process of installing, upgrading, configuring, and removing packages from apps. Using SPM, we can easily manage third-party library dependencies. If any library has a dependency on another one, SPM will handle it for you easily.

Fantastic Enumeration

Swift's enums offer a wide variety of features that can be used in different situations. It helps us write type-safe code that is error-free and easy to use. Swift's enums offer associated values, custom raw values, iterating over cases, cases as functions, etc.

Example

<div class="execute"></div><div class="code-mirror  language-javascript" contenteditable="plaintext-only" spellcheck="false" style="outline: none; overflow-wrap: break-word; overflow-y: auto; white-space: pre-wrap;"><span class="token comment">// An enum example with associated values.</span>
<span class="token keyword">enum</span> NetworkEndpoint <span class="token punctuation">{</span>
   <span class="token keyword">case</span> <span class="token function">login</span><span class="token punctuation">(</span>email<span class="token operator">:</span> String<span class="token punctuation">,</span> password<span class="token operator">:</span> String<span class="token punctuation">)</span>
   <span class="token keyword">case</span> <span class="token function">register</span><span class="token punctuation">(</span>params<span class="token operator">:</span> <span class="token punctuation">[</span>String<span class="token operator">:</span> Any<span class="token punctuation">]</span><span class="token punctuation">)</span>
   <span class="token keyword">case</span> categoryList
   <span class="token keyword">case</span> <span class="token function">logout</span><span class="token punctuation">(</span>userId<span class="token operator">:</span> String<span class="token punctuation">)</span>
<span class="token punctuation">}</span>
<span class="token keyword">let</span> loginEndpoint <span class="token operator">=</span> NetworkEndpoint<span class="token punctuation">.</span><span class="token function">login</span><span class="token punctuation">(</span>email<span class="token operator">:</span> <span class="token string">"test@gmail.com"</span><span class="token punctuation">,</span> password<span class="token operator">:</span> <span class="token string">"test@123"</span><span class="token punctuation">)</span>
<span class="token function">print</span><span class="token punctuation">(</span>loginEndpoint<span class="token punctuation">)</span>
</div><div class="output-wrapper"><div class="console-close"></div><div class="code-output"></div></div>

Output

login(email: "test@gmail.com", password: "test@123")

Type Safety

When we create a variable and assign any kind of value to that variable. You cannot assign a new value of another type. Here, Swift will ensure type safety while writing code on a daily basis.

Example

<div class="execute"></div><div class="code-mirror  language-javascript" contenteditable="plaintext-only" spellcheck="false" style="outline: none; overflow-wrap: break-word; overflow-y: auto; white-space: pre-wrap;"><span class="token keyword">var</span> names <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token string">"Amit"</span><span class="token punctuation">,</span> <span class="token string">"Sachin"</span><span class="token punctuation">,</span> <span class="token string">"Sonali"</span><span class="token punctuation">,</span> <span class="token string">"Rahul"</span><span class="token punctuation">]</span>
names<span class="token punctuation">.</span><span class="token function">append</span><span class="token punctuation">(</span><span class="token number">136</span><span class="token punctuation">)</span>
</div><div class="output-wrapper"><div class="console-close"></div><div class="code-output"></div></div>

Output

error: cannot convert value of type 'Int' to expected argument type 'String' names.append(136)

Playgrounds

Swift playground is a development environment released within Xcode. The Swift playground allows developers, students, and others to learn the Swift programming language without creating any projects. This app is available on iPad as well, so you can learn the Swift language more quickly. Basically, the playground app provides a run-time environment to run Swift code.

Conclusion

You learned about the key features of the Swift programming language. But apart of the above, there are so many features available in Swift language. So keep learning other things and do more practice on them.

Updated on: 2022-11-22T10:37:53+05:30

2K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements