我为NSNotification
注册创建了一个小包装类。
public final class EventRegistration<E: AppEvent> {
private(set) var event: E?
private var token: AnyObject?
public init() {}
public init(event: E, token: AnyObject) {
self.event = event
self.token = token
}
public func unregister() {
if let token = self.token,
let event = self.event {
event.unregister(token)
}
token = nil
event = nil
}
public var isRegistered: Bool {
return token != nil
}
deinit {
unregister()
}
}
这是一个简单的课程。现在我想从我所有其他事件的基类上的方法返回它。这是签名:
public class AppEvent : CustomStringConvertible {
public func register(notification: (NSNotification! -> Void))->EventRegistration {
let eventName = self.dynamicType.eventName()
let token = NSNotificationCenter.defaultCenter().addObserverForName(eventName, object: nil, queue: self.dynamicType.eventQueue(), usingBlock: notification)
let registration = EventRegistration(event: self, token: token)
return registration
}
问题是,我可以为register
的返回类型添加什么,以便在子类上调用此方法时获得正确的AppEvent
子类。
即
class SomeSubClass: AppEvent {}
我希望result.event
属于SomeSubClass