In this tutorial you’ll learn about subscripts in Swift. To follow along, it is recommended to have a Mac and the Xcode IDE installed on it. This tutorial makes use of the Xcode playground for compilation of the Swift codes. If you do not have a Mac, you may try using the open-source code editors which support different operating systems such as Atom, SublimeText or VSCode.
Subscripts
Subscript is a way of setting and retrieving values to/from a collection type. Recall in our lesson on Swift Programming – Collection Types, we used the subscript syntax for setting and retrieving values to/from arrays and dictionaries. We can define multiple subscripts in a class, structure and enumeration. Let’s refresh our memory with an example of using the subscript syntax in an array.
var groceries = ["Fruits", "Vegetables", "Tea", "Coffee"]
// using subscript syntax to set a new value to the first item
groceries[0] = "Fruit"
// using subscript syntax to retrieve the first item
print("first item is \(groceries[0])")
Subscript Syntax
A subscript definition syntax is like an instance method syntax and a computed property syntax combined. Like a computed property syntax, a subscript definition syntax can either be read-write or read-only. The following examples demonstrate the syntax of a subscript definition as read-write and as read-only.
// read-write
subscript(index: Int) -> Int {
get { // return a subscript value }
set { // perform some operation on the newValue } // or set(newValue) { }
}
// read-only
subscript(index:Int) -> Int {
// return a subscript value
}
Let’s try an example using the subscript definition syntax in a structure.
enum ArithmeticOperator {
case addition, subtraction, multiplication, division
}
struct MathOperation {
let operand: Int
let arithmeticOperator: ArithmeticOperator
subscript(index: Int) -> Int {
switch(arithmeticOperator) {
case .addition:
return operand + index
case .subtraction:
return operand - index
case .multiplication:
return operand * index
case .division:
return Int(Double(operand) / Double(index))
}
}
}
var mathOperation = MathOperation(operand: 15, arithmeticOperator: ArithmeticOperator.addition)
print(mathOperation[5])
mathOperation = MathOperation(operand: 60, arithmeticOperator: ArithmeticOperator.division)
print(mathOperation[5])
Type Subscripts
So far we tried an example of an instance subscript. Recall in our lesson Swift Programming – Methods, we explore the two different types of methods, instance methods and type methods. Similarly, for subscripts we have instance subscripts and type subscripts. Let’s try an example with a type subscript.
enum DayOfWeek: Int {
case Monday = 1, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
static subscript(index: Int) -> DayOfWeek {
return DayOfWeek(rawValue: index) ?? .Monday
}
}
let friday = DayOfWeek[5]
print(friday)
Reference
https://docs.swift.org/swift-book/LanguageGuide/Subscripts.html