[БЕЗ_ЗВУКА] Всем привет. Состоялся релиз новой версии Swift 4.2. В этом видео мы хотим рассказать о самых важных и интересных, на наш взгляд, изменениях. Мы не будем говорить об ускорении компиляции, оптимизациях, изменениях, связанных со стабильностью ABI, и так далее. Если вам это интересно, посмотрите видео What's New in Swift с WWDC-2018. Мы же затронем лишь те изменения, которые могут напрямую повлиять на ваш код. Для запуска playground, в котором мы демонстрируем изменения, понадобится XCode 10. Для начала вспомним, что интересного было в прошлом обновлении Swift 4.1. Компилятор научился генерировать поддержку протоколов Equatable и Hashable, если вы не сделали этого самостоятельно. Далее. Ранее в протоколе sequence было определено два метода flatmap. Один отбрасывал nil-значения, а второй разворачивал вложенные коллекции. Для того чтобы избавиться от путаницы, первый метод переименовали в compactMap. Следующие изменения. Вы можете проверить, запущено ваше приложение на симуляторе или на реальном устройстве. Это может быть полезно для ситуации, когда поведение системы на симуляторе и реальном устройстве различается. Следующее изменение. В Swift 4.1 мы получили conditional conformance. Можно добавлять дженерикам поддержку протоколов при определенных условиях. Например. В стандартной библиотеке поддержка массивом протокола Equatable, если его элементы тоже поддерживают этот протокол, добавлена таким простым условием. Далее, для протоколов можно указывать рекурсивные условия на ассоциированные типы. На слайде вы видите один из примеров. Свойство boss у сотрудников может быть любого типа, поддерживающего employee. А теперь переходим к изменениям в Swift 4.2. Была переписана реализация implicitly unwrapped optionals. Скорее всего, у вас не будет никаких проблем, но есть ситуации, в которых поведение было изменено. Рекомендуем прочесть эту статью, где все подробно расписано. Далее. Протокол Hashable изменился. Теперь, если вы захотели написать поддержку Hashable самостоятельно, нужно использовать вспомогательную структуру Hasher. Она поможет правильно составить hash-значение. Обратите также внимание на то, что при каждом перезапуске приложения у одного и того же объекта будет генерироваться разный hash. Сделано это ради безопасности. Но если вы раньше сохраняли hash-значения между перезапусками, то вам придется переделывать ваш код. Следующее изменение. Компилятор теперь умеет генерировать для перечисления свойство allCases, которое содержит коллекцию со всеми возможными значениями в этом перечислении. Для этого достаточно указать поддержку протокола Caselterable. То же самое для Hashable, Encodable, Decodable. Опциональные типы, массивы и словари теперь автоматически поддерживают протоколы Equatable, если их содержимое поддерживает Equatable. То же самое работает и для Hashable, Encodable, Decodable. Следующее изменение. Было добавлено кросс-платформенное API для генерации случайных значений. С его помощью вы можете получить случайное число в указанном диапазоне случайных элементов в массиве или перемешать элементы массива. Также с помощью протокола RandomNumberGenerator вы можете написать свой генератор случайных чисел и воспользоваться им, передав в любой из этих методов. Следующее изменение. С помощью директив компилятора error и warning вы можете порождать соответствующее сообщение при компиляции. Удобно использовать, например, вместе с обычным TODO комментарием, чтобы не забыть о недоделанном коде. Следующее изменение. В коллекцию были добавлены методы для поиска последнего элемента по условиям, а также переименованы аналогичные методы для поиска первого. Следующее изменение. В коллекции появился метод allSatisfy для проверки, соответствуют ли все элементы определенным условиям. Следующее изменение. С помощью метода removeAll(where теперь вы можете легко удалить все элементы, удовлетворяющие условиям. На этом все. Ждем релиз Swift 5 в 2019 году. Помимо мелких улучшений там обещают стабильное ABI. О том, что это такое и насколько близко команда разработчиков SWIFT подобралась к этой цели, можно узнать на соответствующей страничке на сайте swiftdata.org. [ЗВУК]