> 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