【Swift UI/Combine】@Publishedとは?プロパティの監視と使い方

この記事からわかること

  • SwiftCombineフレームワーク
  • @Published使い方
  • クラスプロパティ監視する方法

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

Swift UIでクラスのプロパティの変更を監視するために使用する@Published属性についてどのようなものなのかまとめていきます。

@Publishedとは?

公式リファレンス:@Published

@propertyWrapper  struct Published<Value>

@Publishedとは非同期処理やデータバインディングなどための機能を提供するCombineフレームワークに属するプロパティラッパです。Swift UIでは@ObservedObjectとセットで使用するイメージが強いですが、もちろん単体でも役割を持っています。

おすすめ記事:【Swift UI】@ObservedObjectの意味と使い方!クラスとプロトコルとの関係

@Publishedの役割は指定したプロパティのPublisherを発行することです。PublisherはCombineフレームワークの肝部分であり状態変換(データなど)検知し通知を出す存在です。それをSubscriber(サブスクライバー)が購読することで値の変化時に任意の処理を施したり、状態変化に応じた処理を実行させることができます。

おすすめ記事:【Swift UI】Combineフレームワークの使い方!PublisherとSubscriberの違い

@Publishedは@Stateと同じく変更を検知するとViewの再レンダリングが行われます。また内部的にはwillSetobjectWillChangesendメソッドを呼び出されているため検知のタイミングは値が変更される直前になります。

おすすめ記事:【Swift】プロパティオブザーバとは?willSetとdidSetの使い方

使い方

@Publishedはプロパティラッパなのでクラスのプロパティを宣言時のvarやletの前に付与します。クラスにのみ使用できるように制約がかけられているので構造体では使用できません。

class Weather {
    @Published  var temperature: Double
    init(temperature: Double) {
        self.temperature = temperature
    }
}

Publisherとして操作する

@Publishedの公式ドキュメントを見るとPublisherとしての使用例が記述されています。

class Weather {
    @Published  var temperature: Double
    init(temperature: Double) {
        self.temperature = temperature
    }
}

let weather = Weather(temperature: 20)
cancellable = weather.$temperature
    .sink() {
        print ("Temperature now: \($0)")
}
weather.temperature = 25

上記の例ではPublisherとなったプロパティからsinkメソッドを呼び出すことでサブスクライバーを登録しています。これでプロパティの値の変更が観測されたタイミングでサブスクライバーとして登録された任意の処理を実行させることができます。

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index