Первые дни новогодних праздников позади, а значит пора возвращаться к контенту. Что может быть лучше для начала года чем лекции Стенфорда. Пятая лекция сосредотачивается на архитектуре приложений, модели состояния и связке с UI — это следующий логичный шаг после первых четырёх лекций
@StateObject, @ObservedObject, @Binding и реактивное обновление View.enum, структуры и Optional для описания состояния приложенияВсе эти подходы помогают перейти от простого UI к полноценному приложению с бизнес-логикой, состояниями и тестируемой моделью
Почему это полезно?
#cs193p
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12
iOS Broadcast
Новая лекция из курса iOS Development with SwiftUI от Stanford University продолжает тему архитектуры приложений на SwiftUI — от базового разделения Model/View/ViewModel к более сложным паттернам устойчивости и масштабируемости. Лекция полностью состоит из демонстрации, на основе которой после лекции формируется домашнее задание.
Продвинутая архитектура SwiftUI-приложений:
Observable, @MainActor, ViewModelsСвязь Model ↔️ ViewModel ↔️ View
@Published, Binding, @StateObject)Работа с навигацией и состоянием
Домашнее задание:
Создать игру, похожую на CodeBreaker (которую создают в курсе), но с буквами английского алфавита вместо цветных меток, а также со следующими требованиями:
#cs193p
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Оказывается есть аналог глобального AGENTS.md для каждого проекта. Можно настроить общие подходы через скилы.
Skills заменяют AGENTS.md
Skill — это каталог, содержащий:
Skills позволяют разделять знания по темам, например:
и использовать их во всей своей экосистеме AI-инструментов
Автор создал Swift Concurrency Skill с модульной структурой:
swift-concurrency/
├── SKILL.md
└── references/
├ async-await-basics.md
├ actors.md
├ tasks.md
├ memory-management.md
└ …
Это даёт агенту глубокий, структурированный контекст, когда он отвечает на вопросы или делает refactor/анализ кода
Преимущества подхода
Agent Skills эффективно превращают набор практик и знаний вашего стека в модульные, переиспользуемые блоки. Это даёт:
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Google и Apple опубликовали совместное заявление, что само по себе редкость. Компании подчеркнули общее видение будущего цифровой экосистемы - AI с акцентом на безопасность, приватность и ответственность крупных платформ.
Факт - бизнес Apple не строится на продаже пользовательских данных
Именно поэтому Apple может:
Для компаний, живущих за счёт рекламы и данных, такой подход просто недоступен.
На этом фоне совместное заявление Apple и Google выглядит не компромиссом, а расчётливым шагом:
Gemini — один из самых зрелых AI-стеков
И ключевое — Gemini легко встраивается как внешний сервис, без передачи контроля над платформой.
Apple делает то, что умеет лучше всего:
Gemini здесь — инструмент, а не хозяин экосистемы.
Apple усиливает платформу, используя privacy как рычаг, а Gemini — один из немногих AI-партнёров, которого можно встроить, не ломая эту модель.
Верите в успех этого партнерства или расстроены тем что Apple признали свое отставание и сдались вендору в плоскости AI?
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Добавить напоминание в дефолтный список — легко.
Но как только у вас появляются кейсы типа Проекты / Контексты / Приоритеты, всё ломается:
Искушение: писать в default list и забыть
EKReminder в defaultCalendarForNewReminders() — и кажется, что задача решена. Но это не UX, а технический костыль.Рабочий подход: создавать свои списки (reminder lists) через
EKCalendarEKCalendar c entity .reminder)Что делаем:
requestFullAccessToReminders()eventStore.calendars(for: .reminder)EKCalendar(for: .reminder, eventStore: ...), задаём title, подбираем source, сохраняем saveCalendar(..., commit: true)EKReminder, выставляя dueDateComponents и сохраняя eventStore.save(reminder, commit: true)Info.plist — Privacy - Reminders Full Access Usage Description.Списки Reminders должны сохраняться в конкретное хранилище (локально / iCloud / CalDAV). Авторы предлагают приоритет:
.local или .calDAV, иначе fallback на defaultCalendarForNewReminders()?.sourcePlease open Telegram to view this post
VIEW IN TELEGRAM