Узнайте, что будет дальше в Swift 5.6 и 5.7

Свифт 5.6

Swift 5.6 был анонсирован в ноябре 2021 года, и ожидается, что он выйдет довольно скоро. Давайте кратко рассмотрим, что нового в языке.

SE-0290: Недоступное ключевое слово

Возможность записи инвертированных условий доступности с использованием нового ключевого слова #unavailable. Например, предположим, что наше приложение поддерживает большое количество версий iOS до iOS 13, где нам приходилось загружать главное окно вручную. Итак, перед Swift 5.6 мы сделаем что-то вроде:

Теперь со Swift 5.6 мы можем делать вещи более читабельными:

SE-0315: Типовые заполнители

«Заполнители типов», которые предписывают компилятору заполнить эту часть типа в соответствии с обычными правилами вывода типов. Заполнители типа пишутся как символ подчеркивания («_»). Например, давайте определим словарь UIColors, а затем компилятор Swift 5.6 выведет тип.

SE-0320: Улучшение кодирования словаря.

До сих пор кодирование словаря было на удивление ограничено в том смысле, что в качестве ключей допускались только типы Int или String. Это предложение вводит совершенно новый протокол с именем CodingKeyRepresentable, который позволяет вам иметь кодируемые словарные ключи любого типа, соответствующие этому протоколу. В приведенном ниже примере я создал пользовательский тип ID, соответствующий этому протоколу, который требует предоставления codingKey и инициализации с общим ключом кодирования. Тогда кодирующий словарь с ключами типа ID становится простым.

SE-0337: поддерживаемая параллельная миграция

В Swift 5.5 представлены механизмы для устранения гонок данных из языка, включая протокол Sendable, чтобы указать, какие типы имеют значения, которые можно безопасно использовать за пределами задач и субъектов. Однако Swift 5.5 не требует использования Sendable и является необязательным, что означает, что могут происходить гонки данных. Следовательно, это предложение означает, что по умолчанию компилятор будет проверять эти возможные гонки данных, которые могут произойти. Например:

SE-0335: экзистенциальный any

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

В Swift 6 экзистенциальные типы должны быть явно написаны с помощью any:

Свифт 5.7

Swift 5.7 содержит небольшие улучшения в отношении непрозрачных типов для улучшения читабельности и видимости. Давайте кратко пробежимся по этим изменениям.

SE-0341: Непрозрачные параметры функции

Непрозрачные типы теперь можно использовать в параметрах функций и индексах, где они обеспечивают сокращенный синтаксис для введения универсального параметра. Это изменение удаляет много стандартного кода из объявления функции. Перед этим новым изменением мы обнаруживаем, что пишем общие функции, как показано ниже:

Это предложение расширяет синтаксис непрозрачных типов результатов до параметров, позволяя указывать параметры функций, которые являются универсальными, без шаблонного кода, связанного со списками универсальных параметров. Функция horizontal выше может быть выражена как:

SE-0328: Структурные непрозрачные типы результатов

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

Надеюсь, вам понравилась и была полезна эта статья.