Пока все радуются iOS 26, давайте вспомним, что же нам стало доступно вместе с релизом Swift 6.2.
Approachable Concurrency
Swift 6.2 упрощает параллельное программирование:
@MainActor
async
функции: можно писать асинхронный код без доступа к мутации состояния@concurrent
Safe Systems Programming
Новые фичи по написанию низкоуровневого быстрого кода безопасно:
unsafe pointer
Swift расширение для VS Code официально в релизе:
Точный контроль над "ворнингами"
Предупреждениями компилятора теперь можно гранулярно управлять через установку
diagnostic group
идентифицируемой именем. Например, теперь можно выставить "считать все предупреждения ошибками" кроме предупреждений о депрекейтах API..target(
name: "MyLibrary",
swiftSettings: [
.treatAllWarnings(as: .error),
.treatWarning("DeprecatedDeclaration", as: .warning),
]
)
Улучшили дебаг многопоточки:
Подпроцесс
В Swift 6.2 представлен новый пакет
Subprocess
с оптимизированным API для запуска внешних процессов и управления ими. import Subprocess
let swiftPath = FilePath("/usr/bin/swift")
let result = try await run(
.path(swiftPath),
arguments: ["--version"]
)
let swiftVersion = result.standardOutput
Foundation
Библиотека Foundation включает современный NotificationCenter API, который использует конкретные типы уведомлений вместо строк и нетипизированных словарей. Типы уведомлений также указывают, отправляются ли они синхронно на основной актор или асинхронно через соответствие
MainActorMessage
или AsyncMessage
.Observation
Swift 6.2 позволяет транслировать изменения состояния наблюдаемых типов в рамках транзакций с помощью нового типа асинхронной последовательности
Observations
. Это позволяет избежать избыточных обновлений пользовательского интерфейса, повышает производительность и гарантирует, что ваш код будет реагировать на согласованный снапшот изменения.Тестирование
Новые API для повышения выразительности тестов и результатов тестирования.
-@Test("square() returns x * x")
-func squareIsXTimesX() {
+@Test func `square() returns x * x`() {
#expect(square(4) == 4 * 4)
}
Поддержка WebAssembly
Swift 6.2 получил поддержку WebAssembly, также известной как Wasm. WebAssembly — это платформа виртуальных машин, ориентированная на переносимость, безопасность и высокую производительность. Вы можете создавать как клиентские, так и серверные приложения для Wasm и развертывать их в браузере или на других платформах. Узнайте больше о Wasm в обзоре поддержки WebAssembly в Swift.
Что из этого вы больше всего ждали?
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍3
Фичефлаги - простая пятничная тема на обсудидить. Флаги позволяют включать и выключать определенные функциональные возможности в зависимости от условий. Если вы используете trunk-based подход, то вы точно активно пользуетесь фичефлагами. В статье разбирается базовая реализация фичефлагов, которую можно значительно улучшить. Что бы я заложил, если передо мной стояла задача реализовать фичефлаги в новом приложении:
Вы используете фичефлаги в своем прилоежнии? Если да, то что бы вы еще отметили? Если нет, то почему?
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤2
Навалим немного базы:
[weak self]
используется для предотвращения утечек памяти в замыканиях. В обработчиках завершения [weak self]
и guard let self
используются для проверки существования self перед продолжением выполнения. Но SE-0269 позволяет использовать неявные self-захваты в ситуациях, когда замыкания не сохраняются, что снижает вероятность утечек памяти.Проблемы с [weak self] в Task
Предотвращение утечек памяти в Task
Рекомендации по использованию [weak self] в Task:
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🤔2
Я помогаю с подготовками статей и это официально самая сложная из них, как в плане материала, так и по доработке подачи. Постарался помочь найти баланс между хардкором и капитаном очевидностью. Комментариев не много, так что либо все понятно, либо вообще ничего не понятно.
Суть рассказа - метод
swift_conformsToProtocolMaybeInstantiateSuperclasses
который значительно замедляет запуск приложения, а используется повсеместно - as?
, as!
, String(describing:)
и String(reflecting:)
.Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👍4🤔1
Неустаревающая классика, ручное и автоматическое завершение задач в Swift, сколько провожу собесы, столько разработчики валятся на этом вопросе. Если с NSOperations и GCD еще были нюансы, то в Swift Concurrency, мне казалось, все очевидно. База:
Использование модификатора
.task
.task
запускается при появлении View и отменяется при его исчезновении.Повторение работы с модификатором
.task(id:)
.task(id:)
запускается при появлении представления и повторяется при изменении идентификатора.Проверка отмены в коде
try
или Task.checkCancellation()
.Долгоживущие задачи
DataService
.Ручная отмена задач
task.cancel()
для ручной отмены.Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Не смог удержаться и не разбавить статью из техблога duolingo мемами про сам duolingo. У кого еще есть любимые мемы про сову, кидайте в комменты
Рост команды и кодовой базы
Использование макросов Swift
Результаты
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1🔥1