如何快速附加到数组作为扩展名

时间:2021-07-06 22:10:51

标签: swift

我很快写了以下内容,并希望它能正常工作:

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 子句什么都不做?
我做错了什么?

1 个答案:

答案 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)
    }
}

相关问题