指定された一連のタイマーのいずれかがタイムアウトしたとき、完了したとき、またはリスト全体がリセットされたときに出力する必要がある出力信号があります。
enum DeviceActionStatus {
case pending
case completed
case failed
}
struct DeviceAction {
let start: Date
let status: DeviceActionStatus
func isTimedOut() -> Bool // if start is over 30 seconds ago
let id: String
}
出力信号:
let pendingActionUpdated: Signal<[DeviceAction], NoError>
入力:
let completeAction: Signal<String, NoError>
let tick: Signal<Void, NoError> // runs every 1 second and should iterate to see if any DeviceAction is timed out
let addAction: Signal<DeviceAction, NoError>
let resetAllActions: Signal<Void, NoError>
実行中のすべてのデバイス アクションの配列を出力する必要があります。
let output = Signal.combineLatest(
addAction,
resetAllActions,
tick,
Signal.merge(
completeAction,
tick.take(first: 1).map { _ in "InvalidActionId" }
)) // make sure the combinelatest can fire initially
これを .scan に送信して、 が起動されるたびに累積し、addAction
が起動されるたびにリセットしようとしましたが、どれが起動されresetAllActions
たかを知る方法がないため、ロジックを機能させることができません。成長するリストを累積しながら、必要なときにリストを実行してリセットできるようにするにはどうすればよいですか?