[Программирование, Разработка под iOS, Objective C, Swift] Связанные не явные выражения в Swift 5.4 (перевод)
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
В 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
===========
===========
Автор оригинала: Swift by Sundell
===========Похожие новости:
- [Финансы в IT, Игры и игровые приставки, IT-компании] Тим Кук прокомментировал предстоящее судебное разбирательство Apple и Epic
- [Python, Программирование] Шифрование сообщений в RYTHON. От простого к сложному. Шифр Цезаря
- [Программирование, Git, GitHub] Коммиты — это снимки, а не различия (перевод)
- [Программирование, C#] Лучшие практики обработки исключений в C# (перевод)
- [JavaScript, Программирование, Клиентская оптимизация, Математика] Кэширование данных увеличивает скорость даже в неожиданных случаях
- [Администрирование доменных имен] Число заявок на включение в Public Suffix List резко подскочило из-за изменений приватности в Apple iOS 14.5
- [Open source, Программирование, Dart, Flutter] Повышаем качество кода с Dart Code Metrics
- [Гаджеты, Смартфоны, IT-компании, Голосовые интерфейсы] Siri проболталась, что следующая презентация Apple состоится 20 апреля
- [Программирование, Разработка мобильных приложений, Учебный процесс в IT, Карьера в IT-индустрии] Апрельский дайджест: приглашаем на онлайн-практикумы и митапы
- [Программирование, Rust] Как не копировать код в Rust
Теги для поиска: #_programmirovanie (Программирование), #_razrabotka_pod_ios (Разработка под iOS), #_objective_c, #_swift, #_swift, #_ios, #_apple, #_objectivec, #_programming_languages, #_programmirovanie (
Программирование
), #_razrabotka_pod_ios (
Разработка под iOS
), #_objective_c, #_swift
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 20:25
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
В 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) ... 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) ... extension ImageFilter {
static var dramatic: Self { ImageFilter( name: "Dramatic", icon: .drama, transforms: [ .portrait(withZoomMultipler: 2.1), .contrastBoost, .grayScale(withBrightness: .dark) ] ) } } 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))
=========== Источник: habr.com =========== =========== Автор оригинала: Swift by Sundell ===========Похожие новости:
Программирование ), #_razrabotka_pod_ios ( Разработка под iOS ), #_objective_c, #_swift |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 20:25
Часовой пояс: UTC + 5