Strings in Swift
By Flavio Copes
Learn how to work with strings in Swift, including string literals, multi-line strings, interpolation, and concatenation, with beginner-friendly examples.
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 //a String.Index value, not a number
To calculate a specific index in the string, you calculate it using the index(_: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.
Want me to talk about your product? You can sponsor this site.
Related posts about swift: