[swift-evolution] Selector for current method
Jordan Rose
jordan_rose at apple.com
Tue Nov 15 11:02:08 CST 2016
Sorry, I see that #function doesn’t work as a drop-in replacement for #selector. What I’m wondering is what you’re actually using this all for. It seems rare to have a dictionary keyed by the name of a function (but not its arguments) and rarer still to need to prepopulate that dictionary. The only use case I can think of is some generalized mock object, but even then I wonder how useful it is in practice.
(Per the original request, remember too that many Swift methods do not have selectors, since they are not exposed to Objective-C.)
Jordan
> On Nov 15, 2016, at 03:47, Rudolf Adamkovič <salutis at me.com> wrote:
>
> Hi Jordan,
>
>> The stripped-down code seems like it could use any unique key, including #function.
>
>
> That would work only if #function could be used with an argument just like #selector:
>
> class DirectoryListingStub: DirectoryListing {
>
> var cannedOutput: [Selector: Any?] = [
> #function(contentsOfDirectory(at:includingPropertiesForKeys:options:)): nil
> ]
>
> func contentsOfDirectory(at url: URL, includingPropertiesForKeys keys: [URLResourceKey]?, options: FileManager.DirectoryEnumerationOptions) throws -> [URL] {
> return cannedOutput[#function] as! [URL]
> }
>
> }
>
> Obviously, this doesn’t work as #function takes no arguments.
>
> There's no way to get #selector for the current method. And there’s no way to get #function for arbitrary method.
>
> R+
>
>> On 14 Nov 2016, at 20:07, Jordan Rose <jordan_rose at apple.com> wrote:
>>
>> This doesn’t seem unreasonable, but I’m not sure if that makes it reasonable. :-) What’s your use case? The stripped-down code seems like it could use any unique key, including #function.
>>
>> Jordan
>>
>>
>>> On Nov 13, 2016, at 15:50, Rudolf Adamkovič via swift-evolution <swift-evolution at swift.org> wrote:
>>>
>>> Hi there!
>>>
>>> in Swift 3, we now have #selector and #keyPath yet there’s still no _cmd like we have in Objective-C.
>>>
>>> Example:
>>>
>>> class DirectoryListingStub: DirectoryListing {
>>>
>>> var cannedOutput: [Selector: Any?] = [
>>> #selector(contentsOfDirectory(at:includingPropertiesForKeys:options:)): nil
>>> ]
>>>
>>> dynamic func contentsOfDirectory(at url: URL, includingPropertiesForKeys keys: [URLResourceKey]?, options: FileManager.DirectoryEnumerationOptions) throws -> [URL] {
>>> let selector = #selector(contentsOfDirectory(at:includingPropertiesForKeys:options:))
>>> return cannedOutput[selector] as! [URL]
>>> }
>>>
>>> }
>>>
>>> Problem: I had to specify #selector twice.
>>>
>>> I though I’d be able to use #function but:
>>>
>>> #selector = contentsOfDirectoryAt:includingPropertiesForKeys:options:error:
>>> #function = contentsOfDirectory(at:includingPropertiesForKeys:options:)
>>>
>>> It’d be great if #selector (without arguments) returned the current selector.
>>>
>>> Or am I missing something?
>>>
>>> R+
>>> _______________________________________________
>>> swift-evolution mailing list
>>> swift-evolution at swift.org
>>> https://lists.swift.org/mailman/listinfo/swift-evolution
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20161115/2f5b86b9/attachment.html>
More information about the swift-evolution
mailing list