swift - instancetype parameters type in closure/callback for subclasses -
say have asynchronous task grab array of instances so:
class func fetchlistofinstances(callback: ([mysuperclass])->()) { // long task asynchronously , call callback } and used so:
mysubclass.fetchlistofinstances() { mylist in // mylist inferred [mysuperclass] whatever in mylist { let typeireallywant = whatever as! mysubclass // stuff here each instance of typeireallywant } } swift seems pretty clever types i'll surprised if if there's not way this, couldn't find google search:
class func fetchlistofinstances(callback: ([self])->()) { // long task asynchronously , call callback } ...
mysubclass.fetchlistofinstances() { mylist in // mylist inferred [mysubclass] whatever in mylist { // stuff here each instance of whatever } } it may not possible, thought worth ask.
according 'self' available in protocol or result of class method , use self generic type seems you're after not possible. instead use function, example:
func fetchinstances<t: mysuperclass>(callback: [t] -> void) { // long task asynchronously , call callback. } at point in function above you're going creating instance of t. in case you'll need required initialiser in mysuperclass; meaning subclasses of mysuperclass must implement initialiser. example:
class mysuperclass { required init(arg: string) { // ... } } you can use t(arg: "...") in fetchinstances because know t implements init(arg: string).
finally, call fetchinstances, explicitly stating type of mylist swift knows type t is.
fetchinstances { (mylist: [mysubclass]) in // ... }
Comments
Post a Comment