Tuples in Swift
In Swift, Tuples are another form of collection data type, that can store more than one value of different or same types.
What makes Tuples unique from Arrays is that Tuples can store values of different data types. An example of this could be the variable IDCard, which stores the name (String) of a student as well as his age (Int). In this tutorial, we will discuss the various types of tuples as well as some common functions.
Basic Syntax of a Tuple
The declaration of a tuple is exactly the same as creating a simple variable, except the two values are separated by a comma (,) as so:
var tupleName = (Value1, Value2, Value3… ValueX)
//Swift Tuple with the same Data type: var characters = ("Harry", "Ron", "Draco") //Swift Tuple with different data type: var HealthID = ("Harry", 16, 175.4)
As shown, a tuple can have the same data type, as the names of book characters. But, it can also contain different data types like String(name), Int(age), and Height(Float) all within a single variable.
Accessing values of a Tuple
Accessing the values of a tuple is similar to accessing the values of Swift Array, by using the index number. The first variable value is marked with an index value of 0, the second value is 1, the third is 2, and so on.
Important Note: to find the “nth” value of a tuple, you need to use the index number “n-1.” Therefore, the index number when n=6 would be 5 i.e the index number of the 6th value is 5. We can access tuple values as so:
var healthID = ("Harry", 16, 175.4) // Accessing the first element print("Name:", healthID.0) //Accessing the second element print("Age:", healthID.1) //Accessing the third element print print("Height:", healthID.2)
//Output: Name: Harry Age: 16 Height: 175.4
Modifying values of a Tuple
To modify, or change, the value of a tuple at a given index, we can simply assign the new value:
var healthID = ("Harry", 16, 175.4) print("Initial values: ") print(healthID) //Modifying the values: healthID.0 = "John" healthID.1 = 21 healthID.2 = 182.6 print("New values: ") print(healthID)
//Output: Inital values: ("Harry", 16, 175.4) New values: ("John", 21, 182.6)
As indicated by the output, we are able to change all the values inside our tuple.
Naming values of a Swift Tuple
Instead of referring to our values using an index number, alternatively, we can assign names to the values and access them accordingly. For example:
//Tuple with names var iphone = (model: "13 pro max", storage: 128, cost: 1099.99) //To access and print values print("Model: ", iphone.model) print("Storage: ", iphone.storage) print("Cost: ", iphone.cost)
//Output: Model: 13 pro max Storage: 128 Cost 1099.99
Assigning a value with a name is much easier to use rather than using its index, for advanced functions that use hundreds of parameters there is no way to recall the value at each index, instead of using names helps clearly distinguish and store the corresponding value as shown in the example above.
Similar to Nested Swift Functions, tuples in Swift can also be implemented as values inside other tuples. This can be shown as:
var companies = ("Apple", "Amazon", "Google", ("Whatsapp", "Facebook", "Instagram"))
In the example above, we created a parent tuple
companiesconsisting of independent companies and as the fourth value, we pass a tuple of subsidiaries. We can even access the values inside the tuple by:
var companies = ("Apple", "Amazon", "Google", ("Whatsapp", "Facebook", "Instagram")) //access and print the tuple variable print(companies.3) //accessing an value of the tuple print(companies.3.2)
//Output: ("Whatsapp", "Facebook", "Instagram") Instagram
As you can see, we are able to locate and print the third value from our nested tuple. Our first print statement simply prints the tuple as a whole, whereas the second print statement is directed to print the third value from the nested tuple.
We can apply the same concept to named nested tuples:
var companies = (company1: "Apple", company2: "Amazon", company3: "Google", subsidaries: (subsidary1: "Whatsapp", subsidary2: "Facebook", subsidary3: "Instagram")) //access and print the tuple variable print(companies.company3) //accessing an value of the tuple print(companies.subsidaries.subsidary1)
//Output: Google Whatsapp
We were able to replicate the output by using the names instead of the index number, as indicated by the output.
Adding/Removing Values to Tuples
Currently, there is no shortcut function or method of adding or removing values to tuples. Unlike arrays, tuples cannot change their size, only replace their existing values. Running the following code:
var companies = ("Google","Apple") company.remove("Apple") company.add("Meta") print(company)
Would throw an Exception Out-of-Scope error:
main.swift:6:1: error: cannot find 'company' in scope company.remove("Apple") ^~~~~~~ main.swift:7:1: error: cannot find 'company' in scope company.add("Meta") ^~~~~~~ main.swift:8:7: error: cannot find 'company' in scope print(company) ^~~~~~~
Adding Values to Tuples through a Dictionary
One interesting method to add values to a tuple is by having a single variable as a Swift Dictionary and storing the various values within that dictionary. For example:
//Output ["Python": 4.3, "SQL": 2.4] ["Java": 3.7, "Python": 4.3, "SQL": 2.4]
By using this method, we can add values to tuples without having to face any errors. Although we could not append a tuple directly, a viable way around the current functionality constraints is to use either dictionaries or arrays to increase the content of tuples.