当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Swift Optional.Publisher values用法及代码示例


用法一

实例属性

values

发布者生成的元素,作为异步序列。

声明

var values: AsyncPublisher<Self> { get }
FailureNever 时可用。

详述

此属性提供了一个 AsyncPublisher ,它允许您使用 Swift async - await 语法来接收发布者的元素。因为 AsyncPublisher 符合 AsyncSequence ,所以您使用 for - await - in 循环迭代其元素,而不是附加订阅者。

以下示例显示如何使用 values 属性异步接收元素。该示例改编自 Publisher/filter(_:) 运算符文档中的代码片段,它过滤序列以仅发出偶数整数。此示例将 Subscribers/Sink 订阅者替换为 for - await - in 循环,该循环遍历 values 属性提供的 AsyncPublisher


let numbers: [Int] = [1, 2, 3, 4, 5]
let filtered = numbers.publisher
    .filter { $0 % 2 == 0 }


for await number in filtered.values
{
    print("\(number)", terminator: " ")
}

可用版本

iOS 15.0+, iPadOS 15.0+, macOS 12.0+, Mac Catalyst 15.0+, tvOS 15.0+, watchOS 8.0+

用法二

实例属性

values

发布者产生的元素,作为一个抛出的异步序列。

声明

var values: AsyncThrowingPublisher<Self> { get }

详述

此属性提供了一个 AsyncThrowingPublisher ,它允许您使用 Swift async - await 语法来接收发布者的元素。因为 AsyncPublisher 符合 AsyncSequence ,所以您使用 for - await - in 循环迭代其元素,而不是附加订阅者。如果发布者因错误而终止,等待的调用者将收到错误作为 throw

以下示例显示如何使用 values 属性异步接收元素。该示例改编了 Publisher/tryFilter(_:) 运算符文档中的代码片段,它过滤序列以仅发出偶数整数,并以 0 上的错误终止。此示例将 Subscribers/Sink 订阅者替换为 for - await - in 循环,该循环遍历 values 属性提供的 AsyncPublisher。使用这种方法,先前在接收器订阅者的 Subscribers/Sink/receiveCompletion 闭包中提供的错误处理改为在 catch 块中进行。


let numbers: [Int] = [1, 2, 3, 4, 0, 5]
let filterPublisher = numbers.publisher
    .tryFilter{
        if $0 == 0 {
            throw ZeroError()
        } else {
            return $0 % 2 == 0
        }
    }


do {
    for try await number in filterPublisher.values {
        print ("\(number)", terminator: " ")
    }
} catch {
    print ("\(error)")
}

可用版本

iOS 15.0+, iPadOS 15.0+, macOS 12.0+, Mac Catalyst 15.0+, tvOS 15.0+, watchOS 8.0+

相关用法


注:本文由纯净天空筛选整理自apple.com大神的英文原创作品 Optional.Publisher values。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。