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
