刚开始使用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)
})
}
答案 0 :(得分:1)
您所呼叫的上下文中不存在自我。解决此问题的多种方法包括将interpretIncoming定义为闭包变量,或使其成为类方法并根据需要进行调用。
答案 1 :(得分:1)
您的问题中的所有内容都是红色鲱鱼,除了单词self
。您在说:
class MessageData: ObservableObject, Identifiable {
let subscribe = ... self ...
}
您不能在属性声明的初始化程序中提及self
,因为self
是我们正在初始化的过程。还没有self
。
这里的一个简单解决方案可能是将let subscribe
更改为lazy var subscribe
,但是随后您必须在实际代码中要求subscribe
的值才能将初始化发生。但是,还有许多其他可能的方法。