Введение
iOS-разработка — одна из самых быстроразвивающихся платформ в мире технологий. С выходом Swift 6.0 в 2025 году и постоянным обновлением фреймворков Apple, разработчики сталкиваются с необходимостью быстрого прототипирования и поиска решений для типовых задач. Я, как технический писатель и автор курсов по AI, собрал для вас 35 промтов, которые помогут ускорить работу с SwiftUI, UIKit и Core Data. Эти промты не только экономят время, но и стимулируют креативное мышление, особенно при работе с Combine и асинхронностью.
Почему промты? Потому что современные AI-ассистенты (например, Claude, GPT-4o, Gemini Advanced) способны генерировать код, который требует минимальной доработки. Главное — правильно сформулировать задачу. В этой статье вы найдёте не просто список запросов, а структурированные шаблоны с примерами результата и пояснениями.
Важно: Все промты проверены на актуальность в июле 2026 года. Они работают с последними версиями Xcode 17 и Swift 6.0. Никаких выдуманных возможностей — только реальный код и практические советы.
Базовые промты для SwiftUI
SwiftUI — декларативный фреймворк, который требует иного подхода к мышлению. Вот 10 промтов для начинающих и среднего уровня.
1. Создание простого списка с данными
Задача: Сгенерировать View с List, который отображает массив строк, и добавить возможность удаления элементов через swipe.
Промт: «Напиши SwiftUI View, которая показывает список имён из массива. Добавь функционал удаления элемента по свайпу влево с анимацией. Используй @State для управления массивом.»
Пример результата:
import SwiftUI
struct NamesListView: View {
@State private var names = ["Alice", "Bob", "Charlie", "Diana"]
var body: some View {
NavigationStack {
List {
ForEach(names, id: \.self) { name in
Text(name)
}
.onDelete(perform: deleteItems)
}
.navigationTitle("Names")
.toolbar {
EditButton()
}
}
}
private func deleteItems(at offsets: IndexSet) {
withAnimation {
names.remove(atOffsets: offsets)
}
}
}
2. Адаптивная сетка изображений
Задача: Создать LazyVGrid для отображения изображений с URL, с адаптивными колонками и placeholder на время загрузки.
Промт: «Реализуй SwiftUI View с LazyVGrid, которая загружает изображения из массива URL-адресов. Используй AsyncImage с placeholder и обработкой ошибок. Количество колонок должно адаптироваться под ширину экрана.»
Пример результата:
struct ImageGridView: View {
let urls: [URL] = [ /* ... */ ]
let columns = [
GridItem(.adaptive(minimum: 100, maximum: 200))
]
var body: some View {
ScrollView {
LazyVGrid(columns: columns, spacing: 16) {
ForEach(urls, id: \.self) { url in
AsyncImage(url: url) { phase in
switch phase {
case .empty:
ProgressView()
case .success(let image):
image.resizable().scaledToFill()
case .failure:
Image(systemName: "photo.badge.exclamationmark")
@unknown default:
EmptyView()
}
}
.frame(height: 150)
.clipShape(RoundedRectangle(cornerRadius: 12))
}
}
.padding()
}
}
}
3. Форма с валидацией
Задача: Создать форму регистрации с полями email, пароль, подтверждение пароля и валидацией через Combine.
Промт: «Напиши SwiftUI форму для регистрации с полями email, пароль, confirmPassword. Добавь валидацию: email — валидный формат, пароль — минимум 8 символов, confirmPassword должен совпадать с паролем. Используй @State и computed properties для отображения ошибок.»
Пример результата (фрагмент):
struct RegistrationView: View {
@State private var email = ""
@State private var password = ""
@State private var confirmPassword = ""
private var isFormValid: Bool {
email.contains("@") && password.count >= 8 && password == confirmPassword
}
var body: some View {
Form {
Section("Credentials") {
TextField("Email", text: $email)
.textContentType(.emailAddress)
SecureField("Password", text: $password)
SecureField("Confirm Password", text: $confirmPassword)
}
Section {
Button("Register") {
// регистрация
}
.disabled(!isFormValid)
}
}
}
}
4. Анимация при появлении
Задача: Реализовать плавное появление элементов списка с задержкой.
Промт: «Создай SwiftUI View, где каждый элемент списка появляется с анимацией slide и opacity с задержкой в 0.2 секунды между элементами. Используй withAnimation и DispatchQueue или Task.»
5. Темная тема вручную
Задача: Переключатель между светлой и тёмной темой с сохранением в UserDefaults.
Промт: «Напиши SwiftUI View с Toggle для переключения темы. Используй @AppStorage для сохранения выбора и модификатор .preferredColorScheme.»
6. Кастомный TabView
Задача: Создать TabView с кастомными иконками и анимацией переключения.
Промт: «Реализуй кастомный TabBar с тремя вкладками. Используй GeometryReader для определения активной вкладки и добавь анимацию при смене.»
7. Поиск с debounce
Задача: Поле поиска, которое фильтрует список после паузы в наборе.
Промт: «Добавь поле поиска в SwiftUI, которое фильтрует массив строк с задержкой 500 мс. Используй Combine или AsyncSequence.»
8. EnvironmentObject для глобального состояния
Задача: Создать класс UserSettings как ObservableObject и передать его через среду.
Промт: «Создай ObservableObject для настроек пользователя (имя, аватар) и внедри через .environmentObject. Покажи, как использовать @EnvironmentObject в дочерних вью.»
9. Toolbar с кнопками действий
Задача: Добавить toolbar в NavigationStack с несколькими кнопками.
Промт: «Создай ToolbarItemGroup с двумя кнопками: добавление и редактирование. Используй .toolbar для размещения слева и справа.»
10. Alert с действиями
Задача: Показать alert при нажатии на кнопку удаления.
Промт: «Реализуй кнопку удаления, которая показывает alert с подтверждением. Используй @State для управления показом alert.»
Продвинутые промты для UIKit
UIKit остаётся важным для поддержки легаси-проектов и сложных кастомных интерфейсов.
11. Кастомный UICollectionView с CompositionalLayout
Задача: Создать коллекцию с секциями разного размера, используя UICollectionViewCompositionalLayout.
Промт: «Напиши UICollectionViewController с CompositionalLayout, где есть три секции: маленькие квадраты, список и баннер на всю ширину. Используй NSCollectionLayoutSection с fractionalWidth и fractionalHeight.»
Пример результата (фрагмент):
private func createLayout() -> UICollectionViewCompositionalLayout {
return UICollectionViewCompositionalLayout { sectionIndex, layoutEnvironment in
switch sectionIndex {
case 0: // маленькие квадраты
let item = NSCollectionLayoutItem(layoutSize: NSCollectionLayoutSize(widthDimension: .fractionalWidth(0.5), heightDimension: .fractionalHeight(1.0)))
item.contentInsets = NSDirectionalEdgeInsets(top: 4, leading: 4, bottom: 4, trailing: 4)
let group = NSCollectionLayoutGroup.horizontal(layoutSize: NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0), heightDimension: .absolute(100)), subitems: [item])
return NSCollectionLayoutSection(group: group)
default:
return nil
}
}
}
12. DiffableDataSource для UITableView
Задача: Использовать UITableViewDiffableDataSource для автоматического обновления таблицы.
Промт: «Реализуй UITableView с DiffableDataSource. Покажи, как обновить данные через NSDiffableDataSourceSnapshot с анимацией.»
13. Анимированное изменение высоты ячейки
Задача: Ячейка, которая расширяется/сжимается по нажатию.
Промт: «Создай UITableViewCell с автоматическим изменением высоты при нажатии. Используй beginUpdates/endUpdates и констрейнты.»
14. Кастомный UIPageViewController
Задача: Реализовать PageViewController с индикатором страниц.
Промт: «Напиши UIPageViewController с тремя контроллерами и UIPageControl. Добавь переходы с анимацией.»
15. Работа с UIGestureRecognizer
Задача: Добавить долгое нажатие на UIView с вибрацией.
Промт: «Добавь UILongPressGestureRecognizer на UIView. При активации — измени цвет фона и вызови UIImpactFeedbackGenerator.»
16. Карта с MKMapView
Задача: Показать карту с аннотациями и кастомным пином.
Промт: «Создай MKMapView с аннотациями. Используй MKPointAnnotation и кастомный MKAnnotationView.»
17. AVPlayer для видео
Задача: Проигрывание видео с контролами.
Промт: «Напиши ViewController с AVPlayer и AVPlayerViewController. Добавь кнопку play/pause и слайдер прогресса.»
18. Core Graphics: кастомный круг
Задача: Нарисовать прогресс-бар с помощью UIBezierPath.
Промт: «Создай UIView, который рисует дугу с помощью UIBezierPath и CAShapeLayer. Угол должен изменяться анимированно.»
19. URLSession с загрузкой файла
Задача: Загрузить файл с прогрессом.
Промт: «Используй URLSessionDownloadTask для загрузки файла. Отобрази прогресс в UIProgressView и обработай ошибки.»
20. Localization через NSLocalizedString
Задача: Подготовить приложение к локализации.
Промт: «Покажи, как использовать NSLocalizedString с комментариями. Создай строковые файлы для английского и русского.»
Экспертные промты для Core Data
Core Data — мощный, но сложный фреймворк. Эти промты помогут избежать типичных ошибок.
21. Модель с отношениями
Задача: Создать модель «Автор» и «Книга» с отношением one-to-many.
Промт: «Создай Core Data модель с сущностями Author (name, birthDate) и Book (title, pages). Добавь отношение books от Author к Book с каскадным удалением. Сгенерируй NSManagedObject подклассы.»
Пример результата (фрагмент кода генерации):
@objc(Author)
public class Author: NSManagedObject {
@NSManaged public var name: String?
@NSManaged public var birthDate: Date?
@NSManaged public var books: NSSet?
}
extension Author {
@objc(addBooksObject:)
@NSManaged public func addToBooks(_ value: Book)
@objc(removeBooksObject:)
@NSManaged public func removeFromBooks(_ value: Book)
}
22. Batch update для производительности
Задача: Обновить поле у всех объектов без загрузки в память.
Промт: «Используй NSBatchUpdateRequest для установки свойства 'isRead' у всех объектов сущности Message. Покажи, как выполнить запрос и объединить изменения с контекстом.»
23. NSFetchedResultsController с секциями
Задача: Отобразить объекты, сгруппированные по дате.
Промт: «Настрой NSFetchedResultsController с sectionNameKeyPath для группировки по month of date. Реализуй делегат для обновления таблицы.»
24. Миграция данных
Задача: Добавить новое поле в существующую модель.
Промт: «Создай лёгкую миграцию (lightweight migration) для добавления поля 'updatedAt'. Настрой NSPersistentStoreDescription с опциями миграции.»
25. CloudKit синхронизация
Задача: Включить синхронизацию Core Data через CloudKit.
Промт: «Настрой NSPersistentCloudKitContainer для синхронизации данных между устройствами. Добавь обработку ошибок синхронизации.»
26. Сложный предикат
Задача: Найти книги автора, опубликованные после 2020 года.
Промт: «Создай NSFetchRequest с NSPredicate, который фильтрует книги по автору (relationship) и дате публикации. Используй SUBQUERY, если нужно.»
27. Фоновый контекст
Задача: Сохранить данные в фоне без блокировки UI.
Промт: «Создай privateQueueContext с родительским mainContext. Выполни сохранение в фоне через performBackgroundTask.»
28. Удаление дубликатов
Задача: Найти и удалить дубликаты записей по email.
Промт: «Напиши запрос, который находит дубликаты по полю 'email' в сущности User. Удали все, кроме первого, используя batch delete.»
29. Кэширование через Core Data
Задача: Использовать Core Data как кэш для API-ответов.
Промт: «Создай сущность CacheEntry с полями key, data, timestamp. Реализуй методы get/set с автоматической очисткой устаревших записей.»
30. Transient свойства
Задача: Добавить вычисляемое поле, не сохраняемое в БД.
Промт: «Добавь transient свойство 'fullName' к сущности Person, которое объединяет firstName и lastName. Покажи настройку в редакторе модели.»
31. Ordering в отношениях
Задача: Упорядочить список дочерних объектов.
Промт: «Настрой ordered relationship между Playlist и Song. Покажи, как добавлять/удалять песни с сохранением порядка.»
32. Faulting и prefetching
Задача: Оптимизировать загрузку связанных объектов.
Промт: «Настрой relationshipPrefetching на fetchRequest для загрузки связанных объектов одним запросом. Объясни difference между fault и prefetch.»
33. NSExpression для агрегации
Задача: Посчитать среднее количество страниц книг.
Промт: «Используй NSExpression с @avg для вычисления среднего значения по полю 'pages' в сущности Book.»
34. Stale data detection
Задача: Определить, изменились ли данные удалённо.
Промт: «Добавь поле 'modificationDate' и используй его для обнаружения конфликтов при merge.»
35. Combine с Core Data
Задача: Реактивно обновлять UI при изменении данных.
Промт: «Оберни NSFetchedResultsController в Publisher из Combine. Подпишись на изменения в SwiftUI View через @Published.»
Заключение
Мы прошли 35 промтов — от базовых SwiftUI-компонентов до экспертных техник Core Data. Эти шаблоны помогут вам быстрее прототипировать, избегать типичных ошибок и внедрять продвинутые паттерны, такие как DiffableDataSource или фоновые контексты. Важно помнить: промты — это не серебряная пуля, а инструмент для ускорения работы. Всегда проверяйте сгенерированный код на соответствие вашим требованиям и тестируйте на реальных устройствах.
Если вы хотите углубиться в тему, рекомендую официальную документацию Apple по SwiftUI (developer.apple.com/documentation/swiftui) и Core Data (developer.apple.com/documentation/coredata). Для практики — попробуйте применить любой из промтов к своему текущему проекту. Удачи в кодинге!
Комментарии