Русский
Русский
English
Статистика
Реклама

Перевод Связанные не явные выражения в Swift 5.4

В Swift 5.4: не явные выражения для членов классов (также известные как точечный синтаксис) теперь могут использоваться даже при обращении к свойству или методу в результате такого выражения, пока окончательный тип возвращаемого значения остается прежним.

Обратите внимание, что на момент написания статьи Swift 5.4 находится в стадии бета-тестирования в качестве части Xcode 12.5.

На практике это означает, что всякий раз, когда мы создаем объект или значение с помощью статического API, или при обращении обращении к перечисляемому типу, мы теперь можем напрямую вызвать метод или свойство в этом экземпляре класса, и компилятор по-прежнему сможет вывести тот тип, к которому мы обращаемся.

Например, при создании экземпляра UIColor с использованием одного из встроенных статических API-интерфейсов, предоставленных в качестве части системы, мы теперь можем легко изменить альфа-компонент такого цвета без необходимости явно ссылаться на сам UIColor в таких ситуациях, как:

// In Swift 5.3 and earlier, an explicit type reference is always// required when dealing with chained expressions:let view = UIView()view.backgroundColor = UIColor.blue.withAlphaComponent(0.5)...// In Swift 5.4, the type of our expression can now be inferred:let view = UIView()view.backgroundColor = .blue.withAlphaComponent(0.5)...

Конечно, вышеупомянутый подход также работает при использовании наших собственных статических API, например, любых пользовательских определений UIColor, которые мы добавили с помощью расширения:

extension UIColor {    static var chiliRed: UIColor {        UIColor(red: 0.89, green: 0.24, blue: 0.16, alpha: 1)    }}let view = UIView()view.backgroundColor = .chiliRed.withAlphaComponent(0.5)...

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

extension ImageFilter {    static var dramatic: Self {        ImageFilter(            name: "Dramatic",            icon: .drama,            transforms: [                .portrait(withZoomMultipler: 2.1),                .contrastBoost,                .grayScale(withBrightness: .dark)            ]        )    }}

При использовании Swift 5.4 (или более поздних версий в будущем) мы могли бы добавить что-то вроде такого, что позволяет нам легко объединить два экземпляра ImageFilter, путем объединения их .transforms:

extension ImageFilter {    func combined(with filter: Self) -> Self {        var newFilter = self        newFilter.transforms += filter.transforms        return newFilter    }}

С учетом вышеизложенного теперь мы сможем работать с фильтрами, которые комбинируются динамически. Теперь мы можем использовать тот же упрощенный точечный синтаксис, который раньше мог быть применен только к предварительно определенному фильтру.

let filtered = image.withFilter(.dramatic.combined(with: .invert))

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

Источник: habr.com
К списку статей
Опубликовано: 14.04.2021 00:14:01
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Программирование

Разработка под ios

Objective c

Swift

Ios

Apple

Objective-c

Programming languages

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru