@Published — это property wrapper в фреймворке Combine от Apple, который автоматически создаёт publisher для любого свойства, которое он аннотирует. Когда значение свойства изменяется, оно немедленно отправляет новое значение всем активным подписчикам.
Когда ты отмечаешь свойство с помощью @Published, компилятор синтезирует лежащий в основе publisher, доступный через префикс $:
class UserViewModel: ObservableObject {
@Published var username: String = ""
}
let viewModel = UserViewModel()
viewModel.$username // Combine publisher
Любое изменение username автоматически транслирует новое значение через этот publisher.
@Published чаще всего используется внутри классов ObservableObject. Ключевой механизм работает следующим образом:
@Published подключается к встроенному publisher'у objectWillChange классаobjectWillChange срабатывает автоматически@ObservedObject или @StateObject, получают этот сигнал и планируют перерисовкуclass CounterViewModel: ObservableObject {
@Published var count: Int = 0
}
struct CounterView: View {
@StateObject var viewModel = CounterViewModel()
var body: some View {
Text("\(viewModel.count)")
}
}
Увеличение count автоматически запускает обновление представления — никакой ручной работы не нужно.
@Published работает только с типами class, а не со структурамиwillSet)@Published — только те, которые должны управлять обновлениями UIProperty wrapper @Published автоматически создаёт publisher, доступный через префикс $, который испускает новые значения каждый раз, когда свойство изменяется.
Новый — ещё не проверен сообществом
Вы