I don’t think it’s necessary to designate variable type name in the closure, since it should always be declared explicitly in the type name of the closure itself. If the declared type doesn’t match what you expect, what you need is guard-let or try-catch-throw.
Also, in my opinion, the dollar variable should only be used when it has a very simple and clear reference. If it’s hard to understand, you should give it a name.