Рассмотрим объект Notification
со следующими свойствами:
id: String
body: String
repeats: Bool
и рассмотрим массив Notification
s, notifications
:
let notifications = [Notification(id: "1", body: "body1", repeats: false),
Notification(id: "2", body: "body2", repeats: false),
Notification(id: "3", body: "body3", repeats: true)]
Как я могу использовать функцию filter()
более высокого порядка для получения массива Струны, соответствующего каждому id
?
Другими словами, я хотел бы написать замыкание filter()
, которому я передаю свой notifications
, и в результате получается:
["1", "2", "3"]
Поэтому мой оператор сравнения фильтров должен основываться на имени свойства. Это достижимо?
filter
здесь не подходящий инструмент. filter
будет возвращать подмножество уведомлений на основе некоторых критериев (например, только повторяющиеся уведомления).
Вам нужен map
, который используется для преобразования данных.
let idList = notifications.map { $0.id }
Вы можете комбинировать их по мере необходимости. Допустим, вам нужен список идентификаторов для повторяющихся уведомлений.
let ids = notifications.filter { $0.repeats }.map { $0.id }