gpt4 book ai didi

objective-c - Objective-C 中的选择器?

转载 作者:IT老高 更新时间:2023-10-28 12:19:47 26 4
gpt4 key购买 nike

首先,我不确定我是否真的理解选择器是什么。据我了解,它是一个方法的名称,您可以将它分配给一个类型为“SEL”的类,然后运行诸如respondToSelector之类的方法,以查看接收者是否实现了该方法。有人可以提供更好的解释吗?

其次,到目前为止,我有以下代码:

NSString *thing = @"Hello, this is Craig";

SEL sel = @selector(lowercaseString:);
NSString *lower = (([thing respondsToSelector:sel]) ? @"YES" : @"NO");
NSLog (@"Responds to lowercaseString: %@", lower);
if ([thing respondsToSelector:sel]) //(lower == @"YES")
NSLog(@"lowercaseString is: %@", [thing lowercaseString]);

然而,尽管 thing 显然是一种 NSString,并且应该响应小写字符串,但我无法让 'respondsToSelector' 条件返回“YES”...

最佳答案

您必须非常小心方法名称。在这种情况下,方法名称只是“lowercaseString”,而不是“lowercaseString:”(注意没有冒号)。这就是返回 NO 的原因,因为 NSString 对象响应 lowercaseString 消息而不是 lowercaseString:消息。

您如何知道何时添加冒号?如果您在调用它时添加一个冒号,则在消息名称中添加一个冒号,如果它接受一个参数就会发生这种情况。如果它接受零个参数(如 lowercaseString 的情况),则没有冒号。如果它需要多个参数,则必须添加额外的参数名称及其冒号,如 compare:options:range:locale:

您也可以查看documentation并注意是否存在尾随冒号。

关于objective-c - Objective-C 中的选择器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/738622/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com