Ah good point, in swift you can return a function as a closure (see that link) 
so interface builder could bind an action. Like so :

addAction(myClass.actionFunction)

Instead of what it does now:

addAction(myClass, action:"actionFunction:")


Sent from my iPhone

> On 30 Dec 2015, at 14:14, Jean-Daniel Dupas <mail...@xenonium.com> wrote:
> 
> 
>> Le 30 déc. 2015 à 12:21, James Campbell via swift-evolution 
>> <swift-evolution@swift.org> a écrit :
>> 
>> These are very good points. 
>>> 
>>> Actually, it comes in as addAction(action: Selector), not String. You can 
>>> initialize a Selector from a string literal.
>> 
>> Yes :) should have looked it up before I tried to remember it off the top of 
>> my head.
>> 
>>> 
>>> 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
>> 
>> Well I would want to know what selectors people would us:
>> 
>> One with one argument tend to be for events like button actions and 
>> notifications which could be replaced by closures. We could deprecate or 
>> provide warnings when trying to use the Selector Apis in swift.
>> 
>> Others with more tend to be for canPerformSelector which is replaced by 
>> optionals.
>> 
>> The one edge case not handled is nsinvocation or performSelector, I would be 
>> interested why people use this use case and how we would replace it in swift 
>> (if at all).
>> 
>>> 
>>> 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.
>> 
>> I get that they are different but I had the idea that the compiler could 
>> generate a unique name for each closure which when referenced by a selector 
>> it would invoke.
>> 
>> But this would be irrelevant if we moved towards closure Apis.
>> 
>>> 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.
>> 
>> I question when we use things such as removeAction? I've only used 
>> addAction. But I guess again if we moved to closure Apis this point would be 
>> moot.
>> 
>> To me the only case that needs selectors is performSelector or Nsinvocation. 
>> The others can be replaced by closures and the selector api to be deprecated 
>> or to show a warning in swift :) (Xcode could even help migrate by moving it 
>> to a closure that calls the function the selector was pointing to)
>> 
>> I'm not a compiler expert so I rely on the swift team to tell me what's 
>> possible (although at this early stage I think it's more important to figure 
>> out what we want and not be bound by what's possible right now)
> 
> How would the closure based API work with Interface Builder ? 
> 
_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to