如何在Swift中的Combine中在订阅服务器中引用self

时间:2019-08-10 22:45:46

标签: swift nsnotificationcenter publisher subscriber combine

刚开始使用Combine时,遇到一个问题,当我从Publisher(在这种情况下为{{ 1}} ...

这是订阅...

Notification

编译器告诉我的是NotificationCenter。 已经很晚了,我有点累了,有人知道吗? Catalina beta 5 btw上的Xcode 11 beta 5 ...

完整文件:

let subscribe = NotificationCenter.default.publisher(for: Notification.Name(rawValue: "LocalTalkNotificationReceivedData"), object: nil)
    .map( {
        ($0.object as! Data)
    } )
    .sink(receiveValue: {
        self.interpretIncoming(data: $0)
    })

}

2 个答案:

答案 0 :(得分:1)

您所呼叫的上下文中不存在自我。解决此问题的多种方法包括将interpretIncoming定义为闭包变量,或使其成为类方法并根据需要进行调用。

答案 1 :(得分:1)

您的问题中的所有内容都是红色鲱鱼,除了单词self。您在说:

class MessageData: ObservableObject, Identifiable {
    let subscribe = ... self ...
}

您不能在属性声明的初始化程序中提及self,因为self是我们正在初始化的过程。还没有self

这里的一个简单解决方案可能是将let subscribe更改为lazy var subscribe,但是随后您必须在实际代码中要求subscribe的值才能将初始化发生。但是,还有许多其他可能的方法。