Почему Swift запрещает присваивание self в классе init, но не в протоколе init?

Вы можете попробовать следующим образом:

List<PersonWithMetadata> personsAndMEtadata = persons.stream()
        .map(p -> {
                    //search for the meta data based on the person id
                    Metadata meta = metadata.stream()
                            .filter(m -> m.getId() == p.getId())
                            .findFirst()
                            .get();
                    // then create a PersonWithMetadata object based on Person and metadata
                    return new PersonWithMetadata(
                            p.getId(), p.getFirstName(), p.getLastName(),
                            meta.getDate(), meta.getCity(), meta.getJob()
                    );

                }
        ).collect(Collectors.toList());

Об этой строке:

Metadata meta = metadata.stream().filter(m -> m.getId() == p.getId()).findFirst().get();

Предполагаю, что у вас есть метаданные с идентификатором человека, иначе вы получите NullPointerException.

3
задан Ben Leggiero 18 January 2019 в 22:17
поделиться

1 ответ

Кажется, что в настоящее время ведет себя как ожидалось.

Вся проблема обсуждалась на быстрых форумах: Назначение себя в расширениях протокола

В последний раз, когда эта странность возникала во внутренних дискуссиях, некоторые у нас было то, что, возможно, стоило бы запретить классам соответствовать протоколам с изменяющимися требованиями в целом. Если задуматься, это имеет некоторый смысл - кажется, что было бы довольно сложно написать код, который может работать как с изменяемыми значениями, так и с изменяемыми ссылками в целом, поскольку последние не имеют семантики значений:

[110 ]

Однако дискуссия как бы провалилась.

0
ответ дан Ben Leggiero 18 January 2019 в 22:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: