Swift 5.5:通过文件逐行异步迭代

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

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

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

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

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

swift macos foundation wwdc swift5
2个回答
12
投票

他们添加的主要功能是

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:)


0
投票

URL
结构体有一个变量,可以异步返回目标并按 linn 逐行返回,您可以对其进行迭代,如下所示:

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