0

在 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
4

0 回答 0