Join the AI Workshop to learn more about AI and how it can be applied to web development. Next cohort February 1st, 2026
The AI-first Web Development BOOTCAMP cohort starts February 24th, 2026. 10 weeks of intensive training and hands-on projects.
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 + operator:
var name = "Roger"
name = name + " The Dog"
Append text to a string with the += operator:
var name = "Roger"
name += " The Dog"
Or using the append(_:) method:
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 characterremoveLast()to remove the last characterlowercased()to get a new string, lowercaseduppercased()to get a new string, uppercasedstarts(with:)which returns true if the string starts with a specific substringcontains()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 o in let name = "Roger" using name[1]. You need to work with indexes.
Any string provides the starting index with the startIndex property:
let name = "Roger"
name.startIndex //0
To calculate a specific index in the string, you calculate it using the index(i:offsetBy:) method:
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 Substring, not String.
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.