0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[Swift] [Combine] ObservableObject でなくても @Published は使用できる件

Posted at

サンプルコード

@PublishedObservableObject はセットで使うものだと誤解されがちですが、そうではありません。

ObservableObject をつけた場合

ObservableObject をつけると @StateObject@ObservedObject@EnvironmentObject のアノテーションをつけた変数で使用可能になります。

import SwiftUI

// ObservableObject をつける
class Hoge: ObservableObject {
    @Published private(set) var mogmoge: Int = 0
}

// コンパイルエラーにはならない🌟
class Piyo {
    @StateObject var hogeStateObject = Hoge()
    @ObservedObject var hogeObservedObject = Hoge()
    @EnvironmentObject var hogeEnvironmentObject: Hoge
}

また@StateObject@ObservedObject@EnvironmentObject を使用には import SwiftUI が必要となります。

つまり、ObservableObjectSwiftUI での View の実装で使うものになります。
(間違っておりましたらご指摘のほどお願いいたします🙇‍♂️)

ObservableObject を外した場合

ObservableObject を外すと @StateObject@ObservedObject@EnvironmentObject のアノテーションをつけた変数で使用できなくなります。

import SwiftUI

// ObservableObject を外す
class Hoge {
    @Published private(set) var mogmoge: Int = 0
}

// コンパイルエラーとなる😭
class Piyo {
    @StateObject var hogeStateObject = Hoge() // Generic struct 'StateObject' requires that 'Hoge' conform to 'ObservableObject'
    @ObservedObject var hogeObservedObject = Hoge() // Generic struct 'ObservedObject' requires that 'Hoge' conform to 'ObservableObject'
    @EnvironmentObject var hogeEnvironmentObject: Hoge // Generic struct 'EnvironmentObject' requires that 'Hoge' conform to 'ObservableObject'
}

Generic struct 'StateObject' requires that 'Hoge' conform to 'ObservableObject'』とこんな感じで怒られてしまいます。

結論

  • ObservableObject を適応した class でなくても @Published は使用できる
  • ObservableObject@StateObject@ObservedObject@EnvironmentObject のアノテーションをつけた変数を使いたいときに使用する = SwiftUI での View の実装で使用する

以上になります。

続編

以下の記事でそんな ObservableObject ではない @Published の使い所について紹介しております。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?