A selector is an identifier which represents the name of a method. It is not related to any specific class or method, and can be used to describe a method of any class, whether it is a class or instance method. Simply, a selector is like a key in a dictionary.
A selector is the name used to select a method to execute for an object, or the unique identifier that replaces the name when the source code is compiled.
The Selector is a special type of comparator which acts as a traffic light that mediates data from two input sources depending on a Boolean value (equivalent to a single bit multiplexor). To find the Selector function, open the Functions palette and select the Programming palette.
Use Selectors to Arrange Calls to Objective-C Methods In Objective-C, a selector is a type that refers to the name of an Objective-C method. In Swift, Objective-C selectors are represented by the Selector structure, and you create them using the #selector expression.
You have to be very careful about the method names. In this case, the method name is just "lowercaseString
", not "lowercaseString:
" (note the absence of the colon). That's why you're getting NO
returned, because NSString
objects respond to the lowercaseString
message but not the lowercaseString:
message.
How do you know when to add a colon? You add a colon to the message name if you would add a colon when calling it, which happens if it takes one argument. If it takes zero arguments (as is the case with lowercaseString
), then there is no colon. If it takes more than one argument, you have to add the extra argument names along with their colons, as in compare:options:range:locale:
.
You can also look at the documentation and note the presence or absence of a trailing colon.
Selectors are an efficient way to reference methods directly in compiled code - the compiler is what actually assigns the value to a SEL.
Other have already covered the second part of your q, the ':' at the end matches a different signature than what you're looking for (in this case that signature doesn't exist).
That's because you want @selector(lowercaseString)
, not @selector(lowercaseString:)
. There's a subtle difference: the second one implies a parameter (note the colon at the end), but - [NSString lowercaseString]
does not take a parameter.
In this case, the name of the selector is wrong. The colon here is part of the method signature; it means that the method takes one argument. I believe that you want
SEL sel = @selector(lowercaseString);
NSString's method is lowercaseString
(0 arguments), not lowercaseString:
(1 argument).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With