This tutorial belongs to the Swift series
Strings are one of the most popular tools in programming.
In Swift, a string can be defined using the string literal syntax:
let name = "Roger"
We use double quotes. Single quotes are not valid string delimiters.
A string can span over multiple lines, using 3 double quotes:
let description = """ a long long long description """
You can use string interpolation to embed an expression in a string:
let age = 8 let name = """ Roger, age \(age) Next year he will be \(age + 1) """
Concatenate two strings with the
var name = "Roger" name = name + " The Dog"
Append text to a string with the
var name = "Roger" name += " The Dog"
Or using the
var name = "Roger" name.append(" The Dog")
You can count the characters in a string using the
count string property:
let name = "Roger" name.count //5
Any string comes with a set of useful methods, for example:
removeFirst()to remove the first character
removeLast()to remove the last character
lowercased()to get a new string, lowercased
uppercased()to get a new string, uppercased
starts(with:)which returns true if the string starts with a specific substring
contains()which returns true if the string contains a specific character
and many, many more.
When you need to reference an item into the string, since strings in Swift are unicode, we can't simply reference the letter
let name = "Roger" using
name. You need to work with indexes.
Any string provides the starting index with the
let name = "Roger" name.startIndex //0
To calculate a specific index in the string, you calculate it using the
let name = "Roger" let i = name.index(name.startIndex, offsetBy: 2) name[i] //"g"
The index can be used also to get a substring:
let name = "Roger" let i = name.index(name.startIndex, offsetBy: 2) name.suffix(from: i) //"ger" //Or using the subscript: name[i...] //"ger"
When you get a substring from a string, the type of the result is
let name = "Roger" let i = name.index(name.startIndex, offsetBy: 2) print(type(of: name.suffix(from: i))) //Substring
Substrings are more memory efficient, because you do not get a new string, but the same memory structure is used behind the scenes, although you need to be careful when you deal with strings a lot, as there are optimizations you can implement.
Strings are collections, and they can be iterated over in loops.