Свойство getter как функция - PullRequest
       8

Свойство getter как функция

0 голосов
/ 29 августа 2018

Можно ли получить доступ к получателю свойства, чтобы его можно было передать таким функциям, как 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 невозможно получить без экземпляра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...