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:
Screenshare done right—and everything else too.We can't fix Xcode's random bugs for you, but we can at least make it easier to pair in. Multi is a new video tool that lets anyone point, draw and even type in your Xcode—or any other app. When you work in Multi it automatically takes notes, including what files you looked at. Try it out for free!
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
A New Pair Programming Tool for XcodePair programming in Xcode is difficult. Stop struggling to describe which line of code to change or dancing around who’s screen sharing. With Multi, simply point, draw, or even take control of your teammate’s Xcode. Multi just launched into early access, so be the first to try it out!
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"