在 Swift 中,假设我们有一个 actor,它有一个私有结构。
我们希望这个 actor 具有响应性,并允许发布者访问发布私有结构的特定字段的发布者。
以下代码似乎有效。但它会产生一个我不明白的警告。
public actor MyActor {
private struct MyStruct {
var publicField: String
}
@Published
private var myStruct: MyStruct?
/* We force a non isolated so the property is still accessible from other contexts w/o await in other modules. */
public nonisolated let publicFieldPublisher: AnyPublisher<String?, Never>
init() {
self.publicFieldPublisher = _myStruct.projectedValue.map{ $0?.publicField }.eraseToAnyPublisher()
}
}
警告:
Actor 'self' can only be passed 'inout' from an async initializer
这意味着什么?是否有可能摆脱这个警告?它是否“危险”(这会在以后引起问题)吗?
注意:
如果我使用$myStruct
而不是_myStruct.projectedValue
,它根本不会编译。我认为这是相关的,但我不知道如何。
在这种情况下,错误是:
'self' used in property access '$myStruct' before all stored properties are initialized