我很快写了以下内容,并希望它能正常工作:
Promise
而且我不明白为什么它没有 - 它说“在调用追加时没有完全匹配”。 如果我注释掉 append 行,它就会编译。 但是,使用此代码,
extension Array where Element : AnyCancellable
{
mutating func add( event : NSNotification.Name, handler: @escaping () -> () )
{
let cancellation_token : AnyCancellable = event.sink( handler: handler)
self.append(cancellation_token) // error here
}
}
分配失败,并显示“无法将类型‘AnyCancellable’的值转换为指定类型的‘元素’”。
所以就好像 where 子句什么都不做?
我做错了什么?
答案 0 :(得分:1)
我假设您希望发布者来自 Notification.Name
,而不是 Nofication.Name
本身(它没有 sink
方法)。
主键将 Element : AnyCancellable
更改为 Element == AnyCancellable
。此外,handler
闭包应采用 Notification
作为参数。
extension Array where Element == AnyCancellable
{
mutating func add( event : NSNotification.Name, handler: @escaping (Notification) -> () )
{
let cancellation_token = NotificationCenter.default.publisher(for: event)
.sink(receiveValue: handler)
self.append(cancellation_token)
}
}