繁体   English   中英

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

[英]How do I append to array as an extension in swift

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

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
    }
}

而且我不明白为什么它没有 - 它说“在调用追加时没有完全匹配”。 如果我注释掉 append 行,它就会编译。 然而,有了这个代码,

extension Array where Element : AnyCancellable
{
    mutating func add( event : NSNotification.Name, handler: @escaping () -> () )
    {
        let cancellation_token : Element = event.sink( handler: handler)   // error here
        self.append(cancellation_token)
    }
}

分配失败,并显示“无法将类型‘AnyCancellable’的值转换为指定类型的‘元素’ ”。

所以就好像 where 子句什么都不做?
我究竟做错了什么?

我假设您想要来自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)
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM