在Swift泛型中指定动态类型

时间:2016-07-04 22:37:02

标签: swift generics

我为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

类型

0 个答案:

没有答案