Mode:
Duration:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import Foundation
struct Person {
let name: String
let age: Int
var email: String?
}
struct PersonManager {
private var people: [Person] = []
mutating func add(_ person: Person) {
people.append(person)
}
func people(matching predicate: (Person) -> Bool) -> [Person] {
people.filter(predicate)
}
mutating func updateEmail(for name: String, to newEmail: String) -> Bool {
guard let index = people.firstIndex(where: { $0.name == name }) else {
return false
}
var person = people[index]
person.email = newEmail
people[index] = person
return true
}
}
var manager = PersonManager()
manager.add(Person(name: "Alice", age: 25, email: "alice@example.com"))
manager.add(Person(name: "Bob", age: 30, email: nil))
manager.add(Person(name: "Charlie", age: 35, email: "charlie@example.com"))
manager.updateEmail(for: "Bob", to: "bob@example.com")
let adults = manager.people { $0.age >= 30 }
for person in adults {
let email = person.email ?? "No email"
print("\(person.name): \(email)")
}Coding works best on desktop or with an external keyboard.