Where is a powerful keyword within Swift to easily filter out values. It can be used in many different variants from which most of them are listed in this post.
Usage in a switch
Consider having the following enum:
Latest macOS versions, betas of Xcode, and remove access to solve CI issuesBitrise’s CI solution allows you to run your tests and deliver your builds using the latest technology. Receive Xcode updates within 24 hours and use their remote access solution to solve those issues that only seem to happen on CI. Get started.
enum Action {
case createUser(age: Int)
case createPost
case logout
}
Using where
you can easily filter the case for a specific age range:
func printAction(action: Action) {
switch action {
case .createUser(let age) where age < 21:
print("Young and wild!")
case .createUser:
print("Older and wise!")
case .createPost:
print("Creating a post")
case .logout:
print("Logout")
}
}
printAction(action: Action.createUser(age: 18)) // Young and wild
printAction(action: Action.createUser(age: 25)) // Older and wise
Usage in a for loop
Printing even numbers using a for-loop.
let numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for number in numbers where number % 2 == 0 {
print(number) // 0, 2, 4, 6, 8, 10
}
Usage in protocol extensions
Extending an Array
type based on its element.
extension Array where Element == Int {
func printAverageAge() {
let total = reduce(0, +)
let average = total / count
print("Average age is \(average)")
}
}
let ages = [20, 26, 40, 60, 84]
ages.printAverageAge() // Average age is 46
Usage in first
Get a first element based on a condition.
let names = ["Henk", "John", "Jack"]
let firstJname = names.first(where: { (name) -> Bool in
return name.first == "J"
}) // Returns John
Usage in contains
Determine if an array contains a condition matching element.
let fruits = ["Banana", "Apple", "Kiwi"]
let containsBanana = fruits.contains(where: { (fruit) in
return fruit == "Banana"
}) // Returns true
Latest macOS versions, betas of Xcode, and remove access to solve CI issuesBitrise’s CI solution allows you to run your tests and deliver your builds using the latest technology. Receive Xcode updates within 24 hours and use their remote access solution to solve those issues that only seem to happen on CI. Get started.
Usage in initialisers
Conditional initialisers to only allow for certain types.
extension String {
init(collection: T) where T.Element == String {
self = collection.joined(separator: ",")
}
}
let clubs = String(collection: ["AJAX", "Barcelona", "PSG"])
print(clubs) // prints "AJAX, Barcelona, PSG"