SwiftUI Academy · レッスン

CombineをSwiftUIにつなぐ

Publisherの出力を監視可能な状態に渡します。

レッスン 4/413 ステップ

「CombineをSwiftUIにつなぐ」はCoddyKit上の無料SwiftUI Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSwiftUI Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 SwiftUI Academyコースには全4レッスンが含まれています。

2つの世界をつなぐ

Combine は時間とともに値のストリームを生成し、SwiftUI は状態から再描画します。両者を橋渡しするには、そのストリームを状態に流し込みます。

状態が UI を動かす

SwiftUI は監視対象のプロパティが変更されたときだけ再描画します。そのため画面を更新するには、最終的に publisher からそのようなプロパティへ値を書き込む必要があります。

プロパティに代入する

assign subscriber はキーパスを使って、各値をクロージャなしでプロパティに直接書き込みます。

publisher
    .assign(to: &model.$results)

Observable モデルで状態を保持する

公開するプロパティを @Observable モデルクラスに定義し、値が届くたびに Combine から更新させます。

@Observable
class SearchModel {
    var results: [String] = []
}

Cancellable を保存する

各 cancellable をモデルと同じ期間存続する set に保存して、サブスクリプションを有効なまま保ちます。

private var bag = Set<AnyCancellable>()

Sink で更新する

sink で受け取った値を状態プロパティに代入すると、SwiftUI は次の実行ループで再描画します。

pub.sink { [weak self] value in
    self?.results = value
}.store(in: &bag)

メインスレッドにとどめる

UI の更新はメインスレッドで行う必要があるため、値を状態に届ける前に receive(on:) を使います。

.receive(on: RunLoop.main)

TextField から動かす

TextField をモデルのプロパティにバインドし、その変更を発行すると、Combine パイプラインで入力に反応できます。

TextField("Search", text: $model.query)

循環参照を避ける

sink のクロージャ内では self を弱参照でキャプチャし、モデルが自身のサブスクリプションによって保持され続けないようにします。

sink { [weak self] v in self?.value = v }

Combine と async/await

現在のコードでは、入力処理に Combine を使い、パイプライン内のネットワーク呼び出しに async/await を組み合わせることがよくあります。

すっきりした橋渡し

基本のパターンは一貫しています。publisher から operators、そして sink または assign へつなぎ、値を監視可能な状態に反映します。🌉

クイックチェック

バックグラウンドスレッドから Combine publisher を @Observable モデルに流し込んだところ、UI が不自然にちらつきました。どう修正すればよいでしょうか。

まとめ: ストリームから画面へ

Combine と SwiftUI を接続しました。値を operators に通し、メインスレッドへ切り替えてから、監視可能な状態に反映します。🎉

無料で開始

AI チューターと学ぶ Swift — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
30
レッスン
120

よくある質問

「CombineをSwiftUIにつなぐ」レッスンは無料ですか?

はい。「CombineをSwiftUIにつなぐ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、SwiftUI Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 SwiftUI Academyコースには全4レッスンが含まれています。

「CombineをSwiftUIにつなぐ」で何を学びますか?

Publisherの出力を監視可能な状態に渡します。 ブラウザで直接実行するハンズオンコードでSwiftUI Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

SwiftUI Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのSwiftUI Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「CombineをSwiftUIにつなぐ」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このSwiftUI Academyレッスンでコードを書いて実行できますか?

はい。すべてのSwiftUI Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. PublisherとSubscriber
  2. mapとfilterで変換する
  3. ライブ検索のデバウンス
  4. CombineをSwiftUIにつなぐ
← SwiftUI Academyに戻る