[swift-users] #selector() in Swift

Mohit Athwani mohit.athwani at gmail.com
Fri Aug 11 18:46:49 CDT 2017

Hi Alex,

Thanks for the update!


Mohit Athwani

On Aug 10, 2017, 2:56 AM -0700, Alex Blewitt <alblue at apple.com>, wrote:
> > On 10 Aug 2017, at 07:04, Mohit Athwani via swift-users <swift-users at swift.org> wrote:
> >
> > With closures being first class citizens in Swift and the ability of closures to be able to capture scope, it seems a little archaic to me that the #selector() feature exists in Swift.
> >
> > For example, why does
> > func addTarget(_ target: Any?, action: Selector, for controlEvents: UIControlEvents)
> >
> > have a Selector type for action. Why can’t action be defined to be a closure  for example:
> > addTarget(_ target: Any?, action: (sender: UIControl?, forEvent event:UIEvent?) -> Void, for controlEvents: UIControlEvents)
> >
> > What do you guys think?
> Selectors have been around since the start of the Objective-C platform, before either macOS or iOS existed. Blocks weren't added into macOS until relatively recently (from iOS 4 https://en.wikipedia.org/wiki/Blocks_(C_language_extension) if you're interested).
> So many of the APIs that predated the introduction of blocks worked by having a selector that could be called back on a target, and these APIs are still present today in current releases of macOS and iOS.
> The Swift based API is purely there because there are some APIs that aren't capable of taking a block, and hence aren't capable of taking a Swift closure.
> Alex
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-users/attachments/20170811/5097b33d/attachment.html>

More information about the swift-users mailing list