[swift-evolution] [Idea] Expression to retrieve the Objective-C selector of a method

Brent Royal-Gordon brent at architechies.com
Wed Dec 30 04:36:59 CST 2015

> What if selectors arguments could be imported into swift to take a closure instead ? 
> This would fit into the proposal to rewrite the imported objective c Apis 
> So 
> - addAction:(Selector)action
> Becomes
> addAction(action:(AnyObject)->Void)
> Instead of
> addAction(action:String) 
> Like it does now.

Actually, it comes in as addAction(action: Selector), not String. You can initialize a Selector from a string literal.

Three questions about your proposal:

1. Where does "AnyObject -> Void" come from? The only signature information in a selector is the (minimum) number of arguments. Those arguments can be of any type, and 

2. How are we supposed to implement this? You need to somehow convert a closure (a pointer to a bunch of captured variables with a pointer to a function embedded inside it) into a selector (a pointer to a table of selectors inside the Objective-C runtime, which does not do any normal memory management); I just don't see how you make that work. Saying "let's do this thing" doesn't mean it's *possible* to do the thing.

3. What about other uses for selectors? addAction() is all well and good, but you also need removeAction(), and Swift closures don't have stable identities to test with.

Brent Royal-Gordon

More information about the swift-evolution mailing list