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č <[email protected]> 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 <[email protected]> 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 
>>> <[email protected]> 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
>>> [email protected]
>>> https://lists.swift.org/mailman/listinfo/swift-evolution
>> 
> 

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to