以下代码在 Xcode 中 Swift 6 语言版本下构建时出错。这是架构问题还是有简单的解决方法?类型Bool
是,Sendable
但它的发布者不是。
Non-sendable type 'Published<Bool>.Publisher' in implicitly asynchronous access to actor-isolated property '$isRecording' cannot cross actor boundary
import Foundation
final class Recorder {
var writer = Writer()
var isRecording = false
func startRecording() {
Task { [writer] in
await writer.startRecording()
print("started recording")
}
}
func stopRecording() {
Task { [writer] in
await writer.stopRecording()
print("stopped recording")
}
}
func observeValues() {
Task {
for await value in await writer.$isRecording.values {
isRecording = value
}
}
}
}
actor Writer {
@Published private(set) public var isRecording = false
func startRecording() {
isRecording = true
}
func stopRecording() {
isRecording = false
}
}
请参阅此屏幕截图以查看我看到的 AVCam 示例代码中的实际错误(唯一的修改是输入@preconcurrency
)import AVFoundation
。
我不会
@Published
使用然后获取values
,而是直接使用AsyncStream
来传递值。AsyncStream
如果流元素可发送,那么也是可发送的。observedValues
然后在请注意,为了
isRecording = value
安全起见,需要将observeValues
整体Recorder
隔离到全局参与者。