[英]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.