Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+1 721новая вакансия за сутки·82 368вакансий открыто сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании6 963
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 400 кандидатов открыты к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python15 330
  • Облачные технологии11 893
  • QA вакансии3 403
  • Backend вакансии1 851
  • Инженер данных1 418
  • Продакт-менеджер845

Разработка

  • Android1 758
  • iOS1 639
  • AI вакансии884
  • Fullstack вакансии737
  • Frontend вакансии642
  • Mobile вакансии31

По стеку

  • Go8 426
  • Java5 382
  • Node.js1 732
  • Kotlin1 428
  • Rust1 388
  • .NET1 307
  • PHP554
  • C++394
  • C#374

DevOps и инфраструктура

  • Kubernetes6 666
  • Linux-инфраструктура4 922
  • DevOps вакансии4 864
  • Terraform / IaC3 701
  • Мониторинг и Observability1 698
  • CI/CD1 557
  • SRE510
  • Кибербезопасность246

Аналитика и данные

  • Data Scientist779
  • Аналитик данных756
  • Бизнес-аналитик730
  • Системный аналитик96

Другие направления

  • Проджект-менеджер341
  • UI/UX дизайн108
  • Ручное тестирование14

По регионам

  • Вакансии в США40 885
  • Вакансии в Европе17 100
  • Вакансии в Канаде3 927
  • Работа в России3 874

По формату

  • Удалённые вакансии65 309
  • Релокация в США40 896
  • Гибридная работа9 847
  • Офисная работа6 766

По уровню

  • Senior вакансии36 886
  • Middle вакансии17 637
  • Junior вакансии6 023

Сейчас нанимают

Все компании
  • Wise193 вакансии
  • Rakuten189 вакансий
  • ASML164 вакансии
  • Grab134 вакансии
  • Celonis45 вакансий
  • Spotify37 вакансий
  • Adyen29 вакансий
  • Infobip28 вакансий
  • Monzo19 вакансий
  • Darktrace17 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме SwiftUIВсе вопросы
SwiftUIMiddleТеория

В чём разница между модификаторами .onAppear и .task?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

.onAppear — синхронный колбэк без поддержки async/await и без автоотмены; .task запускает async-замыкание и автоматически отменяет его, когда вью исчезает. Для сетевых запросов и AsyncSequence используйте .task.

.onAppear

  • Вызывается синхронно в главном потоке в момент появления вью.
  • Не поддерживает async/await напрямую — чтобы запустить асинхронный код, нужно явно создавать Task { ... }.
  • Задача не отменяется автоматически при исчезновении вью.
  • Подходит для синхронных побочных эффектов: аналитика, изменение состояния, запуск таймера.
struct ExampleView: View {
    @State private var items: [Item] = []

    var body: some View {
        List(items) { item in Text(item.name) }
            .onAppear {
                // Синхронно
                Analytics.log("screen_viewed", name: "ExampleView")

                // Асинхронный код требует явного Task
                Task {
                    items = try await ItemService.fetch()
                }
            }
    }
}

Разница между .onAppear и .task

Оба модификатора реагируют на появление представления на экране, но имеют принципиально разную природу: .onAppear — синхронный колбэк, .task — встроенный механизм запуска асинхронных задач с автоматической отменой.

.task

  • Запускает async-замыкание при появлении вью и автоматически отменяет (Task.cancel()) его при исчезновении.
  • Принимает опциональный id: — при изменении id задача перезапускается, старая отменяется.
  • Приоритет задачи настраивается: .task(priority: .background) { ... }.
  • Подходит для сетевых запросов, подписок на AsyncSequence, любых асинхронных операций.
struct ExampleView: View {
    @State private var items: [Item] = []
    let categoryID: UUID

    var body: some View {
        List(items) { item in Text(item.name) }
            .task(id: categoryID) {
                // Запускается при появлении и при смене categoryID
                do {
                    items = try await ItemService.fetch(category: categoryID)
                } catch is CancellationError {
                    // Вью исчезло — задача отменена, это нормально
                } catch {
                    print("Ошибка: \(error)")
                }
            }
    }
}

Подписка на AsyncSequence

.task {
    for await notification in NotificationCenter.default
        .notifications(named: .NSManagedObjectContextDidSave)
        .map({ $0 }) {
        await refreshData()
    }
    // Цикл автоматически завершится при отмене задачи
}

Сравнительная таблица

  • async/await: .task — да, нативно; .onAppear — нет, нужен явный Task { }
  • Автоотмена при disappear: .task — да; .onAppear — нет
  • Перезапуск при смене id: .task(id:) — да; .onAppear — нет
  • Синхронные побочные эффекты: оба подходят

Подводные камни

  • Утечка задачи в .onAppear — если внутри .onAppear создан Task { } без хранения токена, задача продолжает выполняться после исчезновения вью и может обновлять уже не существующее состояние.
  • Игнорирование CancellationError в .task — не обрабатывать отмену как ошибку: повторные попытки (retry) при отмене создают неотменяемые циклы.
  • id: Equatable — часто меняющиеся значения — если id в .task(id:) меняется очень часто (например, текст поискового запроса без debounce), задача будет постоянно перезапускаться и отменяться, создавая лишнюю нагрузку.
  • Двойной вызов в preview — в SwiftUI Preview и при hot reload .onAppear/.task могут вызываться дважды; код должен быть идемпотентным.
  • .task не является заменой .onAppear везде — для чисто синхронных операций (установка фокуса, трекинг аналитики) использование .task избыточно и добавляет ненужный overhead планировщика.
  • Приоритет задачи — по умолчанию .task использует .userInitiated; для фоновых операций явно передавайте priority: .background, иначе тяжёлые вычисления блокируют UI.

Частые вопросы на собеседовании

  • Как SwiftUI перерисовывает (re-render) представления и что вызывает обновление view?
  • В чём разница между @State, @Binding, @ObservedObject и @StateObject?
  • Как async/await интегрируется с представлениями SwiftUI через модификатор .task?
  • Как работает NavigationStack в SwiftUI и чем он отличается от NavigationView?

Типичные ошибки

  • Сводить «модификаторами .onAppear и .task» к синтаксису и не объяснять идентичность view.
  • Игнорировать жизненный цикл, основной поток или момент освобождения ресурсов в сценарии swiftui-15.
  • Выбирать API по привычке, не проверяя состояние, ошибки, доступность и платформенные ограничения.

Что проверяет интервьюер

  • Формулирует точную модель для «модификаторами .onAppear и .task» и подтверждает ее корректным примером.
  • Умеет связать ответ с инвалидация body, тестированием и отладкой на устройстве.
  • Называет ограничения подхода swiftui-15, включая производительность, память и сопровождение.

Как вы знаете этот вопрос?

Проверить себя по теме SwiftUI →

Источники

  • https://developer.apple.com/documentation/swiftui/view/task(priority:_:)

Связанные темы

SwiftUIconcurrency-debuggingMobile-Engineering