Site icon AppTractor

Поваренная книга SwiftUI: использование Combine с SwiftUI для управления состояниями 

Combine — это функциональный фреймворк реактивного программирования от Apple. Он предоставляет декларативный Swift API для длящейся обработки значений. Эти значения могут представлять собой события пользовательского интерфейса, сетевые ответы, события по расписанию и многие другие виды асинхронных данных.

При использовании со SwiftUI Combine помогает писать чистый, реактивный код, реагирующий на изменения состояния во времени. В основе Combine лежат издатели и подписчики: издатели издают события, а подписчики прослушивают эти события.

Примечание: В этом примере используется жестко заданный список шуток. В реальном приложении вы замените его сетевым кодом для получения шуток с сервера.

Получение шуток: пример

В этом примере вы создадите простое приложение, которое будет получать случайную шутку из API при каждом нажатии на кнопку. Вы будете использовать Combine для работы с сетью и SwiftUI для отображения результата.

import SwiftUI
import Combine

struct ContentView: View {
  @StateObject private var jokeFetcher = JokeFetcher()

  var body: some View {
    VStack {
      Text(jokeFetcher.joke)
        .padding()
      Button("Fetch Joke") {
        jokeFetcher.fetchJoke()
      }
    }
    .onAppear {
      jokeFetcher.fetchJoke()
    }
  }
}

class JokeFetcher: ObservableObject {
  @Published var joke: String = ""
  private var cancellable: AnyCancellable?
  private let jokes = [
    "Why don't scientists trust atoms? Because they make up everything!",
    "Why did the bicycle fall over? Because it was two tired!",
    "Why don't some animals play cards? Because they are afraid of cheetahs!",
    "Why did the scarecrow win an award? Because he was outstanding in his field!"
  ]

  func fetchJoke() {
    // Networking code here
    // Update `joke` with the result
    if let randomJoke = jokes.randomElement() {
      joke = randomJoke
    }
  }

  deinit {
    cancellable?.cancel()
  }
}

В приведенном выше коде:

Ваш предварительный просмотр должен выглядеть следующим образом:

Вы можете использовать StateObject и протокол ObservableObject вместе с Combine при выполнении вызовов API.

Подводя итог, можно сказать, что Combine — это мощный фреймворк, который может значительно упростить управление состояниями в SwiftUI. Интегрировав Combine с ObservableObject и StateObject в SwiftUI, вы сможете создавать динамичные и реактивные пользовательские интерфейсы, которые с легкостью обрабатывают сложные асинхронные события.

← Предыдущая статья: Шаринг состояний между представлениями с помощью объектов окружения

Источник

Exit mobile version