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


Swift Result.Publisher tryDrop(while:)用法及代碼示例


實例方法

tryDrop(while:)

忽略上遊發布者的元素,直到 error-throwing 閉包返回 false,然後重新發布所有剩餘元素。

聲明

func tryDrop(while predicate: @escaping (Self.Output) throws -> Bool) -> Publishers.TryDropWhile<Self>

返回值

一個發布者跳過元素直到提供的閉包返回 false ,然後重新發布所有剩餘的元素。如果謂詞閉包拋出,發布者將失敗並出現錯誤。

參數

predicate

一個閉包,它接受一個元素作為參數並返回一個布爾值,指示是否從發布者的輸出中刪除該元素。

詳述

使用Publisher/tryDrop(while:) 省略上遊元素,直到您提供的error-throwing 閉包返回false,之後發布流中的剩餘項目。如果閉包拋出,則不會發出任何元素,並且發布者會因錯誤而失敗。

在下麵的示例中,元素被忽略,直到在流中遇到 -1 並且閉包返回 false 。然後發布者重新發布剩餘的元素並正常完成。相反,如果遇到閉包中的 guard 值,則閉包將拋出,並且發布者將失敗並出現錯誤。


struct RangeError: Error {}
var numbers = [1, 2, 3, 4, 5, 6, -1, 7, 8, 9, 10]
let range: CountableClosedRange<Int> = (1...100)
cancellable = numbers.publisher
    .tryDrop {
        guard $0 != 0 else { throw RangeError() }
        return range.contains($0)
    }
    .sink(
        receiveCompletion: { print ("completion: \($0)") },
        receiveValue: { print ("value: \($0)") }
    )


// Prints: "-1 7 8 9 10 completion: finished"
// If instead numbers was [1, 2, 3, 4, 5, 6, 0, -1, 7, 8, 9, 10], tryDrop(while:) would fail with a RangeError.

可用版本

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

相關用法


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