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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python17 129
  • Облачные технологии14 088
  • QA вакансии3 457
  • Backend вакансии2 115
  • Инженер данных1 805
  • Продакт-менеджер1 262

Разработка

  • Android1 865
  • iOS1 698
  • Fullstack вакансии989
  • AI вакансии949
  • Frontend вакансии744
  • Mobile вакансии44

По стеку

  • Go8 660
  • Java6 550
  • Node.js2 020
  • .NET1 722
  • Kotlin1 619
  • Rust1 455
  • C#711
  • PHP683
  • C++572

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

  • Kubernetes7 769
  • DevOps вакансии6 056
  • Linux-инфраструктура5 493
  • Terraform / IaC4 266
  • CI/CD3 250
  • Мониторинг и Observability1 788
  • SRE567
  • Кибербезопасность453

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

  • Data Scientist1 142
  • Бизнес-аналитик927
  • Аналитик данных854
  • Системный аналитик153

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

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

По регионам

  • Вакансии в США44 281
  • Вакансии в Европе23 875
  • Вакансии в Канаде4 475
  • Работа в России3 922

По формату

  • Удалённые вакансии75 035
  • Релокация в США44 281
  • Гибридная работа12 401
  • Офисная работа7 079

По уровню

  • Senior вакансии42 679
  • Middle вакансии20 894
  • Junior вакансии6 722

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

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML166 вакансий
  • Grab137 вакансий
  • Celonis39 вакансий
  • Spotify37 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace16 вакансий

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

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

В чём разница между @State, @Binding, @ObservedObject и @StateObject?

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

@State хранит локальное состояние, @Binding — ссылка на чужое состояние, @StateObject создаёт и владеет ObservableObject, @ObservedObject только наблюдает за переданным снаружи объектом.

@State

@State — локальное состояние, принадлежащее конкретному представлению. SwiftUI хранит значение за пределами структуры, поэтому оно сохраняется при ре-рендерах. Используйте @State для простых значений (числа, строки, булевы), которые не нужны другим представлениям.

struct CounterView: View {
    @State private var count = 0  // приватное, только для этого вью

    var body: some View {
        VStack {
            Text("\(count)")
            Button("+") { count += 1 }
        }
    }
}

@Binding

@Binding — ссылка на состояние, принадлежащее другому представлению. Дочернее представление может читать и изменять значение, но не владеет им. Создаётся из @State с помощью префикса $.

struct ToggleRow: View {
    @Binding var isEnabled: Bool  // владеет родитель

    var body: some View {
        Toggle("Активно", isOn: $isEnabled)
    }
}

struct SettingsView: View {
    @State private var notificationsOn = true

    var body: some View {
        ToggleRow(isEnabled: $notificationsOn)  // передаём binding
    }
}

@StateObject

@StateObject создаёт экземпляр ObservableObject и владеет им. SwiftUI гарантирует, что объект будет создан один раз и уничтожен вместе с представлением. Используйте @StateObject, когда представление является владельцем модели.

final class FormViewModel: ObservableObject {
    @Published var name = ""
    @Published var email = ""
}

struct FormView: View {
    @StateObject private var vm = FormViewModel()  // создаёт и владеет

    var body: some View {
        Form {
            TextField("Имя", text: $vm.name)
            TextField("Email", text: $vm.email)
        }
    }
}

@ObservedObject

@ObservedObject подписывается на уже существующий ObservableObject, но не владеет им. Объект должен быть создан где-то выше и передан извне. Если представление с @ObservedObject пересоздаётся, объект может быть уничтожен и пересоздан — это опасная ловушка.

struct DetailView: View {
    @ObservedObject var vm: FormViewModel  // не создаёт, только наблюдает

    var body: some View {
        Text(vm.name)
    }
}

struct RootView: View {
    @StateObject private var vm = FormViewModel()  // здесь создаётся

    var body: some View {
        DetailView(vm: vm)  // передаём вниз
    }
}

Когда что использовать

  • @State — простые локальные значения (Bool, Int, String).
  • @Binding — значение из родительского представления, которое нужно изменять.
  • @StateObject — когда текущее представление создаёт и владеет ViewModel (ObservableObject).
  • @ObservedObject — когда ViewModel создана выше и передаётся в дочернее представление.

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

  • Использование @ObservedObject вместо @StateObject для создания объекта — объект будет пересоздаваться при каждом ре-рендере родителя, сбрасывая состояние.
  • @State работает только внутри представления — попытка читать его значение в init до появления body не даёт ожидаемого результата.
  • Передача @State-переменной без $ создаёт копию значения, а не Binding — изменения не будут отражены в родителе.
  • В iOS 17+ для @Observable-классов не нужны @StateObject/@ObservedObject — используйте просто @State для владения и передавайте напрямую.
  • Объект в @StateObject инициализируется лениво, но аргументы инициализатора вычисляются при каждом ре-рендере — не передавайте туда тяжёлые вычисления.
  • @Binding нельзя создать из произвольного значения без @State или константой Binding.constant(value) — последнее подходит только для Preview.

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

  • Сводить «@State, @Binding, @ObservedObject и @StateObject» к синтаксису и не объяснять navigation state.
  • Игнорировать жизненный цикл, основной поток или момент освобождения ресурсов в сценарии swiftui-2.
  • Выбирать API по привычке, не проверяя состояние, ошибки, доступность и платформенные ограничения.

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

  • Формулирует точную модель для «@State, @Binding, @ObservedObject и @StateObject» и подтверждает ее корректным примером.
  • Умеет связать ответ с environment, тестированием и отладкой на устройстве.
  • Называет ограничения подхода swiftui-2, включая производительность, память и сопровождение.

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

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

Источники

  • https://developer.apple.com/documentation/swiftui/state
←Предыдущий вопросКак SwiftUI перерисовывает (re-render) представления и что вызывает обновление view?Следующий вопрос→Как `async`/`await` интегрируется с представлениями SwiftUI через модификатор `.task`?

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

SwiftUIframework-api-designMobile-Engineering

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

  • Как SwiftUI перерисовывает (re-render) представления и что вызывает обновление view?
  • Как async/await интегрируется с представлениями SwiftUI через модификатор .task?
  • Как работает NavigationStack в SwiftUI и чем он отличается от NavigationView?
  • Каковы лучшие практики производительности в SwiftUI (избежание лишних re-render)?