我想在NSObject实例上使用选择器,而不需要已实现的协议。例如,如果要调用的NSObject实例支持它,则有一个category方法应该设置一个error属性。这是代码,并且代码按预期工作:
if ([self respondsToSelector:@selector(setError:)])
{
[self performSelector:@selector(setError:) withObject:[NSError errorWithDomain:@"SomeDomain" code:1 userInfo:nil]];
}
但是,编译器看不到带有setError:签名的任何方法,因此对于包含该@selector(setError:)
代码段的每一行,它都会向我发出警告:
Undeclared selector 'setError:'
我不想声明一个协议来摆脱此警告,因为我不希望所有可能使用此协议的类实现任何特殊的东西。按照约定,我希望它们具有setError:
方法或属性。
这可行吗?怎么样?
EP,干杯