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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python8 748
  • Облачные технологии6 616
  • QA вакансии2 169
  • Android1 320
  • Инженер данных872
  • Продакт-менеджер302

Разработка

  • iOS1 232
  • Backend вакансии1 204
  • AI вакансии543
  • Fullstack вакансии497
  • Frontend вакансии417
  • Mobile вакансии28

По стеку

  • Go5 212
  • Java3 116
  • Kotlin1 090
  • Node.js995
  • Rust845
  • .NET661
  • PHP320
  • C++271
  • C#208

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

  • Kubernetes3 913
  • Linux-инфраструктура2 852
  • DevOps вакансии2 678
  • Terraform / IaC2 167
  • Мониторинг и Observability1 066
  • CI/CD923
  • SRE301
  • Кибербезопасность26

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

  • Аналитик данных533
  • Data Scientist436
  • Бизнес-аналитик400
  • Системный аналитик68

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

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

По регионам

  • Вакансии в США26 186
  • Вакансии в Европе10 369
  • Работа в России3 628
  • Вакансии в Канаде2 306

По формату

  • Удалённые вакансии43 484
  • Релокация в США26 186
  • Гибридная работа5 597
  • Офисная работа4 383

По уровню

  • Senior вакансии22 724
  • Middle вакансии11 726
  • Junior вакансии3 874

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

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML164 вакансии
  • Grab135 вакансий
  • Celonis45 вакансий
  • Spotify37 вакансий
  • Infobip28 вакансий
  • Adyen26 вакансий
  • Monzo19 вакансий
  • Darktrace16 вакансий

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

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

Что такое @Environment и какие встроенные environment values используются чаще всего?

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

@Environment(\.<key>) читает системные значения из окружения SwiftUI: colorScheme, locale, dismiss, openURL, scenePhase и др. Значения текут сверху вниз; переопределяются через .environment(\.key, value) на родителе. Только чтение — не изменяет environment.

Что такое @Environment

@Environment читает значение из environment SwiftUI по типобезопасному ключу (KeyPath). Значения текут сверху вниз по дереву view: родительский view может переопределить их через модификатор .environment(\.keyPath, value), и все потомки увидят новое значение, не получая его через параметры.

struct MyView: View {
    @Environment(\.colorScheme) private var colorScheme
    @Environment(\.locale) private var locale
    @Environment(\.dynamicTypeSize) private var typeSize

    var body: some View {
        Text(colorScheme == .dark ? "Тёмная тема" : "Светлая тема")
    }
}

Часто используемые встроенные EnvironmentValues

КлючТипКогда нужен
\.colorSchemeColorSchemeАдаптация к тёмной/светлой теме
\.localeLocaleФорматирование дат, чисел, строк
\.dynamicTypeSizeDynamicTypeSizeАдаптация layout под размер текста
\.isEnabledBoolПроверка, доступен ли элемент для взаимодействия
\.dismissDismissActionЗакрытие sheet / popover / NavigationStack без ссылки на родителя
\.openURLOpenURLActionОткрытие URL через системный обработчик
\.scenePhaseScenePhaseРеакция на active / inactive / background
\.horizontalSizeClassUserInterfaceSizeClass?Адаптация layout под компактный / regular экран
\.accessibilityReduceMotionBoolОтключение анимаций при настройке Reduce Motion
\.fontFont?Наследование шрифта из родителя

Практический пример: dismiss + openURL + scenePhase

import SwiftUI

struct ProfileSheet: View {
    @Environment(\.dismiss) private var dismiss
    @Environment(\.openURL) private var openURL
    @Environment(\.colorScheme) private var scheme

    let profileURL: URL

    var body: some View {
        VStack(spacing: 16) {
            Text("Профиль")
                .font(.title)
                .foregroundStyle(scheme == .dark ? .white : .black)

            Button("Открыть в браузере") {
                openURL(profileURL)   // используем Environment action
            }

            Button("Закрыть") {
                dismiss()             // закрываем sheet без @Binding
            }
        }
        .padding()
    }
}

Реакция на смену ScenePhase

struct AppRoot: View {
    @Environment(\.scenePhase) private var scenePhase

    var body: some View {
        ContentView()
            .onChange(of: scenePhase) { _, newPhase in
                switch newPhase {
                case .background:
                    // сохранить черновики, сбросить чувствительные данные
                    print("Приложение ушло в фон")
                case .inactive:
                    print("Приложение неактивно")
                case .active:
                    print("Приложение активно")
                @unknown default:
                    break
                }
            }
    }
}

Создание собственного EnvironmentKey

// 1. Определить ключ
struct AnalyticsClientKey: EnvironmentKey {
    static let defaultValue: AnalyticsClient = .live
}

extension EnvironmentValues {
    var analyticsClient: AnalyticsClient {
        get { self[AnalyticsClientKey.self] }
        set { self[AnalyticsClientKey.self] = newValue }
    }
}

// 2. Внедрить в тестах или Preview
MyFeatureView()
    .environment(\.analyticsClient, .mock)

// 3. Читать в view
struct MyFeatureView: View {
    @Environment(\.analyticsClient) private var analytics

    var body: some View {
        Button("Купить") {
            analytics.track("purchase_tapped")
        }
    }
}

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

  • @Environment — только чтение. Property wrapper читает значение, но не позволяет его изменить напрямую. Для записи используйте .environment(\.key, value) на родительском view.
  • DismissAction работает только внутри sheet / fullScreenCover / NavigationStack. Вызов dismiss() в корневом view ничего не делает и не даёт ошибки — баг сложно заметить.
  • scenePhase читается точно, если вешать onChange на App или WindowGroup. Если читать в глубоко вложенном view, значение может отражать фазу сцены, а не всего приложения.
  • Не кешируйте Environment-значения вне body. Они обновляются при каждом render-проходе. Сохранение в локальную переменную вне body приведёт к устаревшим данным.
  • Переопределение через .environment() влияет только на поддерево. Если случайно поставить модификатор не там — потомки не получат новое значение, а ошибки компилятора не будет.
  • dynamicTypeSize не равен UIFont.preferredFont. SwiftUI управляет шрифтом через систему, но если вы вычисляете рамки вручную (GeometryReader + размеры), изменение DynamicTypeSize не пересчитает их автоматически.
  • Нет runtime-ошибки при отсутствии внедрённого значения (в отличие от @EnvironmentObject): вернётся defaultValue. Это может скрыть ошибку конфигурации — в тестах всегда внедряйте явно.
  • В iOS 17+ появился @Environment для @Observable-объектов. Синтаксис: @Environment(MyModel.self) без KeyPath. Не путайте с KeyPath-вариантом — это разные API.

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

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

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

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

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

  • Формулирует точную модель для «@Environment и какие встроенные environment values используются чаще всего» и подтверждает ее корректным примером.
  • Умеет связать ответ с инвалидация body, тестированием и отладкой на устройстве.
  • Называет ограничения подхода swiftui-5, включая производительность, память и сопровождение.

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

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

Источники

  • https://developer.apple.com/documentation/swiftui/state
←Предыдущий вопросЧто такое `@FocusState` и как управлять фокусом клавиатуры в SwiftUI?Следующий вопрос→Расскажите о случае, когда вы решали проблему с SwiftUI: lifecycle, performance, testing, release или platform integration.

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

SwiftUIframework-api-designMobile-Engineering