So, restating the question: You want to have a method on a class such that it will return an object which is genericised with that class. Like:
class A { func createB() -> B<Self> { } } So that if you have C which is a subclass of A, calling createB() would return B<C>, and not B<A> Is that correct? -Kenny > On Jul 5, 2016, at 8:40 AM, Jon Akhtar via swift-users > <swift-users@swift.org> wrote: > > I have a generic class that I would like to use. I¹ll include the whole > source. > > public final class EventRegistration<E: AppEvent> { > private(set) var event: E? > private var token: AnyObject? > > public init() {} > > public init(event: AppEvent, 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() > } > } > > > > I would like to use this class in my AppEvent class. Among other things > AppEvent has a method register() > > 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 > } > > > I have 50-100 subclasses of AppEvent that I use directly. > > public class SomeEvent: AppEvent {} > public class SomeOtherEvent: AppEvent {} > public class EvenSomeOtherEvent: AppEvent {} > > They all inherit the register() function. > > I would like the following. > > Let some = SomeEvent().register() { note in } > > some.event.self should be ³SomeEvent² > > Because SomeEvent.register() returns EventRegistration<SomeEvent> > > All the parts are there for this to be statically typed. If I implemented > register in each class I could get the behavior I want. What I am looking > for is a way to say ³the current dynamic type², sort of like ³Self². > > Is there a signature for "public func register(notification: > (NSNotification! -> Void))->EventRegistration<???>" that would accomplish > this, or does this break some type rule I am not aware of, or is it just a > missing language feature. > > If you want points, see: > http://stackoverflow.com/questions/38193012/specifying-a-dynamic-type-in-sw > ift-generics > > Thanks, > > Jon > > > > > _______________________________________________ > swift-users mailing list > swift-users@swift.org > https://lists.swift.org/mailman/listinfo/swift-users _______________________________________________ swift-users mailing list swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users