По мере роста проектов SwiftUI элементы View становятся длинными и сложными. Простой экран быстро превращается в десятки вложенных VStack, HStack и пользовательских модификаторов.
Искушение: extension-ы и вычисляемые свойства
Альтернативный подход: извлечение и повторное использование
Эмпирическое правило для хорошей архитектуры SwiftUI:
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤6
Интересная особенность работы taskGroup которая не вызывает удивления если уже знаешь о ней, но может привести к неожиданным результатам, если написать похожий код не сильно задумавшись. Суть особенности отлично представлена в примере:
withTaskGroup, метод fetchData заменяет сетевой запрос случайной длительностиfetchDatafetchData cсобираются в итоговый массив resultsresults в том порядке, в котором они были возвращены задачами, а не в том порядке, в котором они были созданыВ целом, не на столько важно сохранять исходный порядок, важно понимать что порядок будет случайным и не стоит надеяться на сохранение исходного порядка.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Несмотря на то что я чаще привожу примеры статей про Swift Concurrency, в сердечке все равно Combine. И вот отличная статья для всех, кто еще не использует Combine и сомневается в его полезности.
@Published, @ObservedObject, @StateObject, .onReceive(_:) и @EnvironmentObjectПрелесть
Combine в том, что его можно объяснить объяснить за несколько часов, за несколько дней по-настоящему освоить и больше никогда не быть прежнимPlease open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3❤1👍1🤔1
Давайте разберемся, что же нам представили. Swift продолжает выходить за пределы Apple-экосистемы: представлена Nightly Preview версии SDK для Android.
Как это работает:
Текущие проблемы:
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍1🔥1
Новый язык дизайна Apple - светящийся, анимированный эффект обводки для выделения форм и компонентов. Если вы захотите внедрить подобный эффект для индикации работы AI - можно взять готовое расширение SwiftUI и применить этот эффект.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5❤2
Проблем, не много:
Заметели какие-то особенности?
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👍1
Известные проблемы
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
Итоги розыгрыша - 06 ноября
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍2
С выходом iOS 17 и новых версий SwiftUI Apple представила протокол
TextRenderer — инструмент, который даёт полный контроль над отрисовкой текста: от линий и слов до отдельных глифов.Теперь текст можно анимировать, трансформировать и буквально «оживлять».
Ограниченные возможности стандартного
Text.font(), .foregroundStyle(), .kerning(), без доступа к самому процессу отрисовки.Использование TextRenderer
draw(layout:in:), который позволяет работать напрямую с каждой строкой, глифом или атрибутом.Animatable для создания динамических эффектов (например, пульсации текста).TextAttribute можно задавать разные визуальные эффекты для отдельных частей текста — слово или даже буква могут «жить» отдельно.Практические идеи:
TextRenderer превращает текст в полноценный графический объект SwiftUI.
Теперь дизайнерская выразительность и контроль за рендерингом текста доступны без выхода из декларативной модели SwiftUI.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7
iOS Broadcast
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🎉1
Продолжаем разбираться с нововведениями в SwiftUI, на этот раз доступными уже с iOS 15. Стандартные декларативные View не позволяют реализовать сложную графику или кастомные визуальные эффекты.
Path и ShapeРешение: использование Canvas API
Canvas предоставляет GraphicsContext и позволяет рисовать сразу на уровне пикселей, линий, фигур — прямо внутри SwiftUICanvas { context, size in
context.fill(
Path(ellipseIn: CGRect(origin: .zero, size: size)),
with: .color(.green))
}Canvas открывает новую эру для SwiftUI — графика, которую раньше надо было «обходить», теперь доступна в декларативном стиле. Если хотите сделать приложение с визуальной выразительностью — Canvas точно стоит попробовать!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10 2❤1
Стандартные уведомления через NotificationCenter не учитывают модель конкурентности и изоляцию акторов.
.main, компилятор может выдавать предупреждения при вызове методов, атрибутированных @MainActor.notification.object as? Type, что небезопасно и не даёт строгой типизации.Использование новых протоколов
MainActorMessage и AsyncMessage, доступных с iOS 26+, которые обеспечивают безопасную передачу уведомлений в модели Swift Concurrency решает эту проблемуMainActorMessage: уведомление чётко связано с главным актором — наблюдатель вызывается на главном акторе.AsyncMessage: уведомление может быть опубликовано из любого изоляционного контекста (любой актор или не-актор), и наблюдатель получает его асинхронно.Пример:
// ✅ 1. Определение уведомления:
struct RecentBuildsChangedMessage: NotificationCenter.AsyncMessage {
typealias Subject = [RecentBuild]
let recentBuilds: Subject
}
// ✅ 2. Отправка сообщения
let message = RecentBuildsChangedMessage(recentBuilds: builds)
NotificationCenter.default.post(message)
// ✅ 3. Подписка на сообщения
token = NotificationCenter.default.addObserver(of: [RecentBuild].self, for: .recentBuildsChanged) { message in
self.handleNewRecentBuilds(message.recentBuilds)
}
Please open Telegram to view this post
VIEW IN TELEGRAM
