> What I’m wondering is what you’re actually using this all for.

For example, when testing with Quick (popular testing framework), one can 
describe a function:

describe(“player.play()”) {
    ...
}

If #function worked like #selector, we could do:

describe(#function(Player.play())) {
    ...
}

This would be safe and refactoring friendly.

P.S. I could do this with #selector but that would require @objc/dynamic which 
is not ideal.

R+

> On 15 Nov 2016, at 18:02, Jordan Rose <[email protected]> wrote:
> 
> 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] 
>> <mailto:[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] 
>>> <mailto:[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] <mailto:[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] <mailto:[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