Avatar
List が表示されていない間は流れをせき止める ObservableObject でラップすることで、遷移先からの更新の反映を遅らせることができました。 final class ObservableDam<WrappedValue: ObservableObject>: ObservableObject { typealias ObjectWillChangePublisher = AnyPublisher<WrappedValue.ObjectWillChangePublisher.Output, Never> let wrappedValue: WrappedValue private var cancellable: AnyCancellable? = nil var isActive: Bool = true { didSet { if isActive { let outputs = self.outputs self.outputs = [] for output in outputs { subject.send(output) } } } } private var outputs: [ObjectWillChangePublisher.Output] = [] private let subject: PassthroughSubject<ObjectWillChangePublisher.Output, Never> = .init() var objectWillChange: ObjectWillChangePublisher { subject.eraseToAnyPublisher() } init(_ wrappedValue: WrappedValue) { self.wrappedValue = wrappedValue cancellable = wrappedValue.objectWillChange.sink { [weak self] output in guard let self = self else { return } if self.isActive { self.subject.send(output) } else { self.outputs.append(output) } } } }
2:39 PM
↑こういうのを作って、 struct ContentView: View { @ObservedObject var history: ObservableDam<History> = .init(.shared) ↑こうして } .onAppear { self.history.isActive = true } .onDisappear { self.history.isActive = false } ↑こうする。
2:40 PM
戻ってきた瞬間に更新が発火して、アニメーションして最新状態が表示される。 (edited)