0Pricing
Swift Academy · レッスン

Combineにおける@Publishedとオブザベーション

@Publishedが内部でどのように動作し、Combineのパブリッシャーを通じて変更を通知するのかを学びます。

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

ようこそ

`@Published`はCombineフレームワークのプロパティラッパーで、プロパティが変更されるたびに、パブリッシャーを通じて新しい値を発行します。

@Publishedの基本

```swift import Combine class Counter: ObservableObject { @Published var count = 0 } let c = Counter() let cancel = c.$count.sink { print("Count: \($0)") } c.count += 1 // "Count: 1" c.count += 1 // "Count: 2" ```

ObservableObjectプロトコル

```swift class ViewModel: ObservableObject { @Published var title = "Initial" @Published var items: [String] = [] } ``` `ObservableObject`に準拠するすべてのクラスには、`objectWillChange`パブリッシャーが自動的に付与されます。

objectWillChangeパブリッシャー

```swift class VM: ObservableObject { @Published var name = "" } let vm = VM() let cancel = vm.objectWillChange.sink { print("Will change") } vm.name = "Alice" // "Will change" printed before assignment ```

SwiftUIの@StateObjectで@Publishedを使用する

```swift @StateObject var vm = ViewModel() // In View body: Text(vm.title) // Re-renders when vm.title changes ``` `@StateObject`はViewModelを所有し、`@ObservedObject`は外部で所有されているViewModelを監視します。

@Publishedからのパブリッシャーのチェーン

```swift class Search: ObservableObject { @Published var query = "" @Published var results: [String] = [] private var cancellables = Set() init() { $query .debounce(for: 0.3, scheduler: RunLoop.main) .sink { [weak self] q in self?.search(q) } .store(in: &cancellables) } } ```

@Publishedは代入前に発火する

`objectWillChange`は、新しい値が保存される*前に*発火します: ```swift vm.objectWillChange.sink { _ in print("will change") } $count.sink { n in print("is \(n)") } // Order: "will change" then "is 1" ```

サブスクリプションの保存

```swift var cancellables = Set() c.$count .sink { print("\($0)") } .store(in: &cancellables) // cancellables keeps subscription alive ```

@Publishedの制限事項

• クラス(参照型)でのみ使用できます • `let`定数には使用できません • 明示的に分離を指定しない限り、アクター境界を越えては機能しません • 値は代入の完了*前*に発行されます(willSetのセマンティクス)

Observationマクロ(Swift 5.9以降)

Swift 5.9では、よりシンプルな代替手段として`@Observable`が導入されました: ```swift @Observable class Counter { var count = 0 } // No Combine import needed; SwiftUI auto-subscribes ```

確認問題

`@Published`は、プロパティが設定される前と後のどちらに値を発行しますか?

まとめ

重要なポイント: • `@Published var x`は、`$x`を`Publisher`として公開します • `ObservableObject`には、`objectWillChange`パブリッシャーが自動的に付与されます • 新しい値が保存される前に発火します(willSet) • サブスクリプションは`Set`に保存します • Swift 5.9では、ほとんどの`@Published`の用途を`@Observable`で置き換えられます 次は、プロパティラッパーの合成です。

よくある質問

「Combineにおける@Publishedとオブザベーション」レッスンは無料ですか?

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

「Combineにおける@Publishedとオブザベーション」で何を学びますか?

@Publishedが内部でどのように動作し、Combineのパブリッシャーを通じて変更を通知するのかを学びます。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「Combineにおける@Publishedとオブザベーション」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. カスタムプロパティラッパーの作成
  2. $bindingによる射影値
  3. Combineにおける@Publishedとオブザベーション
  4. 複数のプロパティラッパーの合成
← Swift Academyに戻る