Можно ли получить доступ к получателю свойства, чтобы его можно было передать таким функциям, как filter
/ map
/ reduce
?
Например, если у меня есть User
сущность:
struct User {
let firstName: String
let lastName: String
let isUnderaged: Bool
func fullName() -> String {
return "\(firstName) \(lastName)"
}
}
let users: [User] = [] // or some computed result
Если мне нужно отфильтровать всех несовершеннолетних пользователей, мне нужно создать временное анонимное закрытие, которое возвращает только значение isUnderaged
:
let underagedUsers = users.filter { $0.isUnderaged }
Похоже, если я хочу собрать все данные имена:
let givenNames = users.map { $0.firstName }
, мне нужно создать еще одно анонимное закрытие.
Метод fullName()
, с другой стороны, может быть хорошо передан:
let allNames = users.map(User.fullName)
#selector
принимает форму #selector(getter: User.isUnderaged)
(User
должен быть классом, чтобы это работало, просто использовал его в качестве примера).
Поддерживает ли Swift что-то подобное - передача геттеров в функции, разрешающие замыкания?
Поиск чего-то похожего на это users.filter(User.isUnderaged)
- в настоящее время он не компилируется, так как isUnderaged
невозможно получить без экземпляра.