逐行异步迭代文件

问题描述 投票:0回答:2

在 WWDC2021 28:00 的“平台国情”视频中提到

[Apple] 甚至添加了对文件中逐行异步迭代的支持

在 macOS 12/iOS 15 和 Swift 5.5 的 Foundation 中。

这个新 API 是什么,我现在如何异步地逐行迭代文件?

swift swift5 foundation wwdc
2个回答
13
投票

他们添加的主要功能是

AsyncSequence
AsyncSequence
类似于
Sequence
,但其
Iterator.next
方法是
async throws

具体来说,您可以使用

URLSession.AsyncBytes.lines
来获取文件中的
AsyncSequence
行。

假设你使用的是

async throws
方法,你可以这样做:

let (bytes, response) = try await URLSession.shared.bytes(from: URL(string: "file://...")!)
for try await line in bytes.lines {
    // do something...
}

请注意,还有

FileHandle.AsyncBytes.lines
,但在 文档 中写道:

您可以将 file:// URL 与

FileHandle
中的 async-await 方法结合使用,而不是创建
URLSession
来异步读取文件。其中包括传递异步字节序列的
bytes(for:delegate:)
bytes(from:delegate:)
方法,以及立即返回文件的全部内容的
data(for:delegate:)
data(from:delegate:)


2
投票

URL
结构体有一个变量,它可以异步地逐行返回目标,您可以像这样迭代:

for try await line in URL(string: pathToFile)!.lines { print(line) }
© www.soinside.com 2019 - 2024. All rights reserved.