Tys*_*son 10 cocoa objective-c
我正在学习ObjectiveC并遇到了与内省相关的问题.基本上,我循环遍历一个对象数组并确定它们是否接受lowercaseString选择器.如果他们这样做,我会在对象上调用该选择器.在我确保对象响应该选择器后,我调用它.但是,当我这样做时,我收到了这个警告:"警告:'NSObject;可能无法响应'-lowercaseString'"
虽然代码工作正常,但我不想收到警告.我假设有一种"正确"的方式来确保我没有得到那个警告(即没有关闭警告).有任何想法吗?
NSMutableArray *myArray = [[NSMutableArray alloc] init];
[myArray addObject:@"Hello!"];
[myArray addObject:[NSURL URLWithString:@"http://apple.com"]];
[myArray addObject:[NSProcessInfo processInfo]];
[myArray addObject:[NSDictionary dictionary]];
SEL lowercaseSelector = @selector(lowercaseString);
for (NSObject *element in myArray) {
if ([element respondsToSelector:lowercaseSelector]) {
NSLog([element lowercaseString]); // Warning here
}
}
Run Code Online (Sandbox Code Playgroud)
Rol*_*ien 16
您还可以使用id哪种类型的对象.
for (id element in myArray) {
if ([element respondsToSelector:lowercaseSelector]) {
NSLog([element lowercaseString]);
}
}
Run Code Online (Sandbox Code Playgroud)
小智 6
怎么用performSelector:?
SEL lowercaseSelector = @selector(lowercaseString);
for (NSObject *element in myArray) {
if ([element respondsToSelector:lowercaseSelector]) {
NSLog([element performSelector:lowercaseSelector]); // No warning
}
}
Run Code Online (Sandbox Code Playgroud)
这将摆脱你的编译器警告.
| 归档时间: |
|
| 查看次数: |
4832 次 |
| 最近记录: |