Sobes.tech
Junior — Middle

Kaip vyksta duomenų keitimas tarp modulių SwiftUI naudojant Combine?

sobes.tech AI

Atsakymas iš AI

В SwiftUI с использованием Combine обмен данными между модулями обычно осуществляется через реактивные потоки данных и связывание состояний. Основные подходы:

  • ObservableObject и @Published: создается класс, который реализует протокол ObservableObject, а свойства, которые нужно отслеживать, помечаются @Published. Другие модули подписываются на изменения через @ObservedObject или @StateObject.

  • PassthroughSubject и CurrentValueSubject: для передачи событий или значений между модулями без прямой связи.

Пример:

import SwiftUI
import Combine

class UserSettings: ObservableObject {
    @Published var username: String = ""
}

struct ContentView: View {
    @StateObject var settings = UserSettings()

    var body: some View {
        VStack {
            TextField("Username", text: $settings.username)
            ProfileView(settings: settings)
        }
    }
}

struct ProfileView: View {
    @ObservedObject var settings: UserSettings

    var body: some View {
        Text("Hello, \(settings.username)!")
    }
}

Таким образом, изменения в одном модуле автоматически отражаются в другом через Combine и SwiftUI.