在 WWDC2021 28:00 的“平台国情”视频中提到
[Apple] 甚至添加了对文件中逐行异步迭代的支持
在 macOS 12/iOS 15 和 Swift 5.5 的 Foundation 中。
这个新 API 是什么,我现在如何异步地逐行迭代文件?
他们添加的主要功能是
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 与
中的 async-await 方法结合使用,而不是创建FileHandle
来异步读取文件。其中包括传递异步字节序列的URLSession
和bytes(for:delegate:)
方法,以及立即返回文件的全部内容的bytes(from:delegate:)
和data(for:delegate:)
。data(from:delegate:)
URL
结构体有一个变量,它可以异步地逐行返回目标,您可以像这样迭代:
for try await line in URL(string: pathToFile)!.lines { print(line) }