画像にフィルターを適用するアプリに取り組んでいます。フィルターには、ユーザーが変更できる多くのパラメーターがあります。上記のパラメーターを含む ObservableObject を作成しました。パラメータの 1 つが変更されるたびに、ビューが以前と同じ値を表示する場合でも、ビューの目に見える更新があります。これは、パラメーターを個々の @State 変数としてモデル化した場合には発生しません。
これが予想される場合 (すべての観察対象オブジェクトが変更されるため、それに依存する各ビューが更新されます)、ObservedObject はジョブに適したツールですか? 一方、特に多数のパラメーター (たとえば 10 以上) を複数のサブビューに渡す必要がある場合は、パラメーターを個別の @State/@Binding 変数としてモデル化するのは非常に不便です。
したがって、私の質問:
ここで ObservedObject を正しく使用していますか? 目に見える更新は意図したものではありませんが、受け入れられますか?それとも、swiftUI でこれを処理するためのより良い解決策はありますか?
@ObservedObject を使用した例:
import SwiftUI
class Parameters: ObservableObject {
@Published var pill: String = "red"
@Published var hand: String = "left"
}
struct ContentView: View {
@ObservedObject var parameters = Parameters()
var body: some View {
VStack {
// Using the other Picker causes a visual effect here...
Picker(selection: self.$parameters.pill, label: Text("Which pill?")) {
Text("red").tag("red")
Text("blue").tag("blue")
}.pickerStyle(SegmentedPickerStyle())
// Using the other Picker causes a visual effect here...
Picker(selection: self.$parameters.hand, label: Text("Which hand?")) {
Text("left").tag("left")
Text("right").tag("right")
}.pickerStyle(SegmentedPickerStyle())
}
}
}
@State 変数を使用した例:
import SwiftUI
struct ContentView: View {
@State var pill: String = "red"
@State var hand: String = "left"
var body: some View {
VStack {
Picker(selection: self.$pill, label: Text("Which pill?")) {
Text("red").tag("red")
Text("blue").tag("blue")
}.pickerStyle(SegmentedPickerStyle())
Picker(selection: self.$hand, label: Text("Which hand?")) {
Text("left").tag("left")
Text("right").tag("right")
}.pickerStyle(SegmentedPickerStyle())
}
}
}