Instance Method インスタンスメソッド

onChange(of:perform:)

Adds a modifier for this view that fires an action when a specific value changes. ある修飾子をこのビューに対して加えます、それはあるアクションをある特定の値が変化する時に開始します。

Declaration 宣言

func onChange<V>(of value: V, perform action: @escaping (V) -> Void) -> some View where V : Equatable

Return Value 戻り値

A view that fires an action when the specified value changes. あるビュー、それはあるアクションをこの指定された値が変化する時に開始します。

Parameters パラメータ

value

The value to check against when determining whether to run the closure. クロージャを走らせるかどうかを決定する時にこの値と照合することになります。

action

A closure to run when the value changes. 値が変化する時に実行することになるクロージャ。

newValue

The new value that failed the comparison check. 新しい値、それは比較検査が失敗したものです。

Discussion 議論

You can use onChange to trigger a side effect as the result of a value changing, such as an Environment key or a Binding. あなたは、onChangeを使ってある副作用を引き起こすことが、たとえばEnvironmentキーまたはBindingなど、ある値の変化の結果として行えます。

onChange is called on the main thread. Avoid performing long-running tasks on the main thread. If you need to perform a long-running task in response to value changing, you should dispatch to a background queue. onChangeは、メインスレッド上で呼び出されます。長く動作するタスクをメインスレッド上で実行することを避けてください。あなたが長く動作するタスクをvalueの変化に答えて実行する必要があるならば、あなたはあるバックグラウンドキューにディスパッチすべきです。

The new value is passed into the closure. The previous value may be captured by the closure to compare it to the new value. For example, in the following code example, PlayerView passes both the old and new values to the model. 新しい値は、クロージャに渡されます。以前の値は、クロージャによってキャプチャされて、それを新しい値と比較するかもしれません。例えば、次のコード例において、PlayerViewは古いそして新しい値の両方をmodelに渡します。


struct PlayerView: View {
    var episode: Episode
    @State private var playState: PlayState = .paused


    var body: some View {
        VStack {
            Text(episode.title)
            Text(episode.showTitle)
            PlayButton(playState: $playState)
        }
        .onChange(of: playState) { [playState] newState in
            model.playStateDidChange(from: playState, to: newState)
        }
    }
}