當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Swift Result.Publisher delay(for:tolerance:scheduler:options:)用法及代碼示例


實例方法

delay(for:tolerance:scheduler:options:)

在特定調度程序上將所有輸出延遲到下遊接收器的指定時間量。

聲明

func delay<S>(
    for interval: S.SchedulerTimeType.Stride,
    tolerance: S.SchedulerTimeType.Stride? = nil,
    scheduler: S,
    options: S.SchedulerOptions? = nil
) -> Publishers.Delay<Self, S> where S : Scheduler

返回值

延遲向下遊接收者傳遞元素和完成的發布者。

參數

interval

延遲的時間量。

tolerance

傳遞延遲事件的允許容差。 Delay 發布者可能會早於或晚於指定的時間間隔交付元素。

scheduler

傳遞延遲事件的調度程序。

options

與調度程序行為相關的選項。

詳述

當您需要將元素交付到下遊延遲指定的時間時,請使用 Publisher/delay(for:tolerance:scheduler:options:)

在此示例中, Timer 每秒發布一個事件。 Publisher/delay(for:tolerance:scheduler:options:) 運算符將初始元素的傳遞保持 3 秒(±0.5 秒),之後每個元素在指定的延遲後傳遞到主運行循環的下遊:


let df = DateFormatter()
df.dateStyle = .none
df.timeStyle = .long
cancellable = Timer.publish(every: 1.0, on: .main, in: .default)
    .autoconnect()
    .handleEvents(receiveOutput: { date in
        print ("Sending Timestamp \'\(df.string(from: date))\' to delay()")
    })
    .delay(for: .seconds(3), scheduler: RunLoop.main, options: .none)
    .sink(
        receiveCompletion: { print ("completion: \($0)", terminator: "\n") },
        receiveValue: { value in
            let now = Date()
            print ("At \(df.string(from: now)) received  Timestamp \'\(df.string(from: value))\' sent: \(String(format: "%.2f", now.timeIntervalSince(value))) secs ago", terminator: "\n")
        }
    )


// Prints:
//    Sending Timestamp '5:02:33 PM PDT' to delay()
//    Sending Timestamp '5:02:34 PM PDT' to delay()
//    Sending Timestamp '5:02:35 PM PDT' to delay()
//    Sending Timestamp '5:02:36 PM PDT' to delay()
//    At 5:02:36 PM PDT received  Timestamp '5:02:33 PM PDT' sent: 3.00 secs ago
//    Sending Timestamp '5:02:37 PM PDT' to delay()
//    At 5:02:37 PM PDT received  Timestamp '5:02:34 PM PDT' sent: 3.00 secs ago
//    Sending Timestamp '5:02:38 PM PDT' to delay()
//    At 5:02:38 PM PDT received  Timestamp '5:02:35 PM PDT' sent: 3.00 secs ago

延遲影響元素的交付和完成,但不影響原始訂閱。

可用版本

iOS 13.0+, iPadOS 13.0+, macOS 10.15+, Mac Catalyst 13.0+, tvOS 13.0+, watchOS 6.0+

相關用法


注:本文由純淨天空篩選整理自apple.com大神的英文原創作品 Result.Publisher delay(for:tolerance:scheduler:options:)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。