Fuente
Затишна Галера | iOSКомпас 🧭1️⃣0️⃣6️⃣ Завдання 106Як зробити клас спостережуваним (почи...
734 Vistas/Alcance
2025-06-11 09:30
Mensaje №1958
#iOSКомпас 🧭1️⃣0️⃣6️⃣ Завдання 106Як зробити клас спостережуваним (починаючи з iOS 17)?З вами знову той самий автор каналу @badlinkschannel. Не забувайте підписатися. А ми продовжуємо наші яблучні історіі.🤔 Починаючи з iOS 17, Apple представила новий спосіб зробити клас спостережуваним за допомогою атрибута @Observable та властивості @Published. Цей підхід спрощує створення спостережуваних об’єктів і покращує інтеграцію зі SwiftUI.🔣 Створення спостережуваного класу з використанням @Observable1️⃣ Імпортуємо необхідні модулі:import SwiftUI
2️⃣ Створюємо клас і додаємо атрибут @Observable:@Observableclass ViewModel { @Published var message: String = "Привіт, світе!"}
3️⃣ Використовуємо спостережуваний об’єкт у SwiftUIТепер ми можемо використовувати наш спостережуваний об’єкт у SwiftUI, і представлення автоматично оновлюватиметься при зміні властивостей, позначених як @Published.struct ContentView: View { @StateObject private var viewModel = ViewModel() var body: some View { VStack { Text(viewModel.message) Button("Змінити повідомлення") { viewModel.message = "Привіт, SwiftUI!" } } }}
🤓 Приклад із поясненням🔣 Повний приклад використання спостережуваного класу в SwiftUI:import SwiftUI@Observableclass ViewModel { @Published var message: String = "Привіт, світе!"}struct ContentView: View { @StateObject private var viewModel = ViewModel() var body: some View { VStack { Text(viewModel.message) Button("Змінити повідомлення") { viewModel.message = "Привіт, SwiftUI!" } } }}
🔣 Приклад використання @EnvironmentObject:import SwiftUI@Observableclass ViewModel { @Published var message: String = "Привіт, світе!"}struct ParentView: View { @StateObject private var viewModel = ViewModel() var body: some View { ChildView() .environmentObject(viewModel) }}struct ChildView: View { @EnvironmentObject var viewModel: ViewModel var body: some View { VStack { Text(viewModel.message) Button("Змінити повідомлення") { viewModel.message = "Привіт, SwiftUI!" } } }}
@Zatishna_Galera