Connect with us

Разработка

Поваренная книга 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()
  }
}

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

  • JokeFetcher — это ObservableObject, который имитирует получение шутки из API. У него есть @Published свойство joke, которое хранит полученную шутку. Каждый раз, когда шутка обновляется, SwiftUI автоматически запускает обновление пользовательского интерфейса.
  • fetchJoke() — это метод, который случайным образом выбирает шутку из массива jokes и присваивает ее свойству joke.
  • В ContentView объект JokeFetcher создается с помощью обертки свойства @StateObject, благодаря чему объект создается только один раз и сохраняется при всех обновлениях представления.
  • Представление Text используется для отображения шутки, а кнопка Button запускает выборку новой шутки при нажатии.
  • Модификатор onAppear используется для получения шутки при первом появлении представления, что гарантирует отображение шутки при запуске приложения.

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

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

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

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

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

Источник

Если вы нашли опечатку - выделите ее и нажмите Ctrl + Enter! Для связи с нами вы можете использовать info@apptractor.ru.
Advertisement

Наши партнеры:

LEGALBET

Мобильные приложения для ставок на спорт
Telegram

Популярное

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: