15 промтов для iOS-разработчика: SwiftUI, UIKit, Core Data и Combine

Современный iOS-разработчик уже не пишет весь код вручную. AI-ассистенты — ChatGPT, Claude, GitHub Copilot — стали такими же инструментами, как Xcode и SwiftLint. Правильно составленный промт (запрос) может сэкономить часы работы: сгенерировать скелет вью, найти утечку памяти, оптимизировать Core Data-запрос или настроить сложный Combine-пайп. В этой подборке — 15 проверенных промтов, которые я сам использую каждый день. Каждый сопровождается реальным кодом и пояснениями. Бери и применяй.

Промты для SwiftUI

1. Генерация кастомного вью с анимацией появления

Описание: Часто нужно быстро набросать карточку или списка с анимацией fade-in. Этот промт создаёт готовое вью с модификаторами .transition и .animation.

Промт:

Создай SwiftUI вью для карточки товара (название, цена, изображение). Добавь анимацию появления: элемент выезжает снизу и становится прозрачным. Используй withAnimation и matchedGeometryEffect для плавности.

Пример результата:

struct ProductCard: View {
    let product: Product
    @State private var isShowing = false

    var body: some View {
        VStack {
            // ... содержимое
        }
        .offset(y: isShowing ? 0 : 50)
        .opacity(isShowing ? 1 : 0)
        .onAppear {
            withAnimation(.easeOut(duration: 0.4)) {
                isShowing = true
            }
        }
    }
}

Почему работает: Анимации на onAppear — классический UX-паттерн. Промт задаёт конкретные требования, AI не гадает.

2. Настройка NavigationStack с динамическими данными

Описание: NavigationStack заменил NavigationView. Промт генерирует корректную навигацию со ссылками и передачей данных.

Промт:

Напиши SwiftUI код для списка статей (сеть Article: id, title, body). Каждая статья должна вести на DetailView. Используй NavigationStack с NavigationLink(value:). В пункте назначения — DetailView, принимающая Article. Добавь toolbar с кнопкой "Избранное".

Пример:

struct ArticlesListView: View {
    let articles: [Article]
    var body: some View {
        NavigationStack {
            List(articles) { article in
                NavigationLink(value: article) {
                    Text(article.title)
                }
            }
            .navigationDestination(for: Article.self) { article in
                DetailView(article: article)
            }
            .toolbar {
                ToolbarItem {
                    Button("Избранное") { /* action */ }
                }
            }
        }
    }
}

Важно: Указывай конкретные типы (Article.self) — AI лучше понимает структуру.

3. Рефакторинг @State / @Observable для iOS 17+

Описание: С приходом Swift 5.9 и Observable макросов старый @StateObject код нужно обновлять. Промт помогает мигрировать.

Промт:

У меня есть класс ViewModel с @Published var items. Перепиши его на iOS 17 стиль, используя @Observable. Покажи, как изменится вью, если убрать @StateObject и заменить на @State.

Пример:

@Observable
class ItemsViewModel {
    var items: [Item] = []
}

struct ItemsView: View {
    @State private var viewModel = ItemsViewModel()
    var body: some View {
        List(viewModel.items, id: \.self) { item in
            Text(item.name)
        }
    }
}

Совет: Всегда указывай версию iOS — AI подстроит код под новые API.

4. Создание кастомного модификатора для анимации перехода

Описание: Повторяющиеся анимации переходов между экранами удобно выносить в модификаторы.

Промт:

Создай ViewModifier под названием SlideInModifier, который анимирует появление вью слева направо с одновременным изменением непрозрачности. Добавь параметры: duration, delay. Примени модификатор к Text("Привет").

Результат: чёткий код модификатора, который легко переиспользовать.

5. Интеграция Swift Charts с динамическими данными

Описание: Swift Charts (iOS 16+) упрощают создание графиков. Промт генерирует работающий Chart с DataSet.

Промт:

Напиши SwiftUI вью, показывающую линейный график продаж по месяцам. Данные — массив структур Sale(month: String, amount: Double). Используй Chart с LineMark. Добавь ось X с месяцами, ось Y с подписями.

Промты для UIKit

6. Программная верстка Auto Layout (без storyboard)

Описание: Большинство проектов переходят на код. Промт генерирует готовый UIView с constraints.

Промт:

Создай UIView с UIImageView и UILabel, сверстанными в коде. UIImageView — квадратный, 60x60, слева. UILabel — рядом, с приоритетом сжатия = 750. Отступы по 12 по всем сторонам. Используй NSLayoutConstraint activate.

Пример:

class CustomCell: UIView {
    let imageView = UIImageView()
    let titleLabel = UILabel()

    override init(frame: CGRect) {
        super.init(frame: frame)
        [imageView, titleLabel].forEach {
            $0.translatesAutoresizingMaskIntoConstraints = false
            addSubview($0)
        }
        NSLayoutConstraint.activate([
            imageView.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 12),
            imageView.centerYAnchor.constraint(equalTo: centerYAnchor),
            imageView.widthAnchor.constraint(equalToConstant: 60),
            imageView.heightAnchor.constraint(equalToConstant: 60),
            titleLabel.leadingAnchor.constraint(equalTo: imageView.trailingAnchor, constant: 12),
            titleLabel.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -12),
            titleLabel.centerYAnchor.constraint(equalTo: centerYAnchor),
        ])
        titleLabel.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
    }
}

Нюанс: Явно указывай translatesAutoresizingMaskIntoConstraints = false — это типичная ошибка новичков, AI её редко пропускает.

7. UICollectionView с Diffable Data Source

Описание: Diffable Data Source делает обновление коллекции безопасным и простым.

Промт:

Реализуй UICollectionView с использованием UICollectionViewDiffableDataSource. Секция одна, ячейка — стандартная. Покажи, как применить snapshot с новыми данными анимированно.

8. Кастомный UIControl для кнопки с состояниями

Описание: Когда UIButton не хватает — пишем свой UIControl.

Промт:

Напиши подкласс UIControl, который отрисовывает круглую кнопку с текстом. В состоянии highlighted меняет цвет фона и масштаб (transform). Добавь target-action для touchUpInside.

9. Помощь при миграции с UIKit на SwiftUI

Описание: Промт для создания UIViewRepresentable обёртки.

Промт:

Создай SwiftUI обёртку для UIActivityIndicatorView. Реализуй UIViewRepresentable: makeUIView, updateUIView. Параметр isAnimating должен менять состояние индикатора.

Промты для Core Data

10. Генерация модели данных с отношениями

Описание: Быстрое создание NSManagedObject подклассов в коде (если используем кодогенерацию вручную).

Промт:

Создай NSManagedObject подклассы для модели: "Author" (name, birthDate) и "Book" (title, pages, author). Отношение: один автор — много книг (to-many). Укажи @objc, dynamic var, обратное отношение books.

11. Настройка NSFetchedResultsController с секциями

Описание: FRC автоматизирует обновление таблицы при изменении данных.

Промт:

Напиши код для UITableViewController, использующий NSFetchedResultsController с секциями по полю category. Сортировка: сначала по категории, затем по дате. Реализуй делегат для автоматических обновлений.

12. Оптимизация запросов с NSPredicate и индексами

Описание: Промт генерирует сложный предикат и подсказывает, как добавить составной индекс в .xcdatamodeld.

Промт:

Напиши запрос Core Data для поиска книг, у которых title содержит "iOS", а price меньше 1000 или isFree == true. Используй NSCompoundPredicate. Укажи, какой составной индекс создать для ускорения.

13. Миграция Core Data (лёгкая и ручная)

Описание: Когда модель меняется — нужна миграция. Промт объясняет шаги.

Промт:

Объясни, как сделать лёгкую миграцию Core Data при добавлении опционального поля. Если лёгкая не подходит — опиши ручную миграцию с Mapping Model. Приведи код в NSPersistentContainer.

Промты для Combine

14. Реактивный сетевой слой с URLSession и Combine

Описание: Замена async/await на Combine для обратной совместимости.

Промт:

Напиши службу NetworkService, которая использует URLSession.dataTaskPublisher для GET запроса к JSON API. Распарси ответ в Codable модель. Обработай ошибку и заверши паблишер на главном потоке с receive(on:).

Пример:

func fetchItems() -> AnyPublisher<[Item], Error> {
    let url = URL(string: "https://api.example.com/items")!
    return URLSession.shared.dataTaskPublisher(for: url)
        .map(\.data)
        .decode(type: [Item].self, decoder: JSONDecoder())
        .receive(on: DispatchQueue.main)
        .eraseToAnyPublisher()
}

Почему это удобно: Паблишер легко тестировать и комбинировать с другими операторами.

15. Debounce и Throttle для поискового запроса

Описание: Избегаем лишних запросов при вводе текста.

Промт:

Создай Combine пайплайн: пользователь вводит текст в TextField -> debounce на 0.5 секунды -> удалить дубликаты -> затем отправить запрос поиска (например, в NetworkService). Подписка должна сохраняться через AnyCancellable.

Ключевой код:

$searchText
    .debounce(for: .seconds(0.5), scheduler: RunLoop.main)
    .removeDuplicates()
    .flatMap { NetworkService.search($0) }
    .sink(receiveCompletion: { _ in }, receiveValue: { results in ... })
    .store(in: &cancellables)

16. Объединение нескольких паблишеров (CombineLatest)

Описание: Когда UI зависит от нескольких состояний — логин и пароль, фильтры.

Промт:

Есть два текстовых поля: email и password. Используй CombineLatest, чтобы создать паблишер, который эмитит Bool (валидна ли форма), когда оба поля непустые и email содержит "@". Подпишись, чтобы включать/выключать кнопку.

Заключение

Эти 16 промтов покрывают 80% типовых задач iOS-разработчика — от построения UI до работы с данными и реактивными потоками. Чтобы получить максимальную пользу, адаптируй промты под свой контекст: добавляй названия своих классов, версию iOS, используемые фреймворки. AI — это мощный ускоритель, но финальное решение всегда остаётся за тобой. Возьми любой промт из списка, вставь в ChatGPT (или другой AI) и убедись, как быстро приходит рабочий код. Экономь время на рутине и сосредотачивайся на архитектуре.

← Все статьи

Комментарии

Читайте также

Промты для генерации Python кода: от скриптов до FastAPI

25 июля 2026

Подключение датчика DHT22 (температура/влажность) к AI-агенту ASI Biont: гайд по интеграции для умного дома и промышленного мониторинга

25 июля 2026

Освойте корпоративное управление: практическое руководство по лидерству в совете директоров с курсом «Корпоративное управление — Совет директоров и корпоративное управление»

25 июля 2026

Освойте реагирование на инциденты: как интегрировать Prometheus с AI-агентом ASI Biont для автоматизации оповещений без кода

25 июля 2026

10 промтов для разработки смарт-контрактов: Solidity, Rust, Vyper

25 июля 2026

От нуля до дата-сайентиста: как курс Asibiont «Data Science с нуля» (на базе ИИ) превращает новичков в аналитиков

25 июля 2026

Multimodal AI (Vision + Audio): как научиться работать с изображениями, аудио и видео через GPT-4V, Whisper и CLIP на курсе Asibiont

25 июля 2026

Vue.js и Nuxt: ускоритель карьеры – почему этот курс станет вашим быстрым путем к мастерству фронтенда

25 июля 2026

Освоение трансформации бизнеса с помощью ИИ: стратегическая дорожная карта от оценки зрелости до ROI – кейс курса Asibiont

25 июля 2026