protocol Identifiable {↵
var id: String { get }↵
}↵
↵
protocol Timestamped {↵
var timestamp: Int { get }↵
}↵
↵
struct Event: Identifiable, Timestamped {↵
var id: String↵
var timestamp: Int↵
var name: String↵
}↵
↵
func findLatest<T>(_ items: [T]) -> T? where T: Identifiable & Timestamped {↵
return items.max(by: { $0.timestamp < $1.timestamp })↵
}↵
↵
func findById<T: Identifiable>(_ items: [T], id: String) -> T? where T: Equatable {↵
return items.first(where: { $0.id == id })↵
}↵
↵
let events = [↵
Event(id: "1", timestamp: 100, name: "Start"),↵
Event(id: "2", timestamp: 200, name: "End")↵
]↵
if let latest = findLatest(events) {↵
print("Latest: \(latest.name) at \(latest.timestamp)")↵
}