【发布时间】:2013-07-07 21:33:05
【问题描述】:
我正在尝试编写一个简单的方法声明格式化程序,我需要验证该字符串是否实际上是一个客观的 c 方法声明。
是否有某种内置功能可以做到这一点,或者可能是一个正则表达式命令来验证这些事情,或者我是否需要为这种情况实现自己的解析器?
现在我已经为空格修剪了字符串并将其转换为小写,因此使用 for 循环更容易验证。例如,在下面的代码中,我可以检查是否出现了子字符串“(void)”,以确定它是一个 void 函数,但这不起作用。一定有更好的办法。
-(BOOL)isVoidMethod:(NSString*)method
{
/* Remove white spaces and lower case the method */
[self convertToParseMethod:method];
BOOL isVoid = NO;
if ([method rangeOfString:@"(void)"].location != NSNotFound) {
isVoid = YES;
} else if ( [method rangeOfString:@"(ibaction)"].location != NSNotFound ) {
isVoid = YES;
}
return isVoid;
}
提前致谢:)
【问题讨论】:
-
你不能那样做,因为返回类型不是必需的(隐式默认为
id),这使得:-doSomething:(id) argument一个完全有效的方法签名。不过,您只能在真正古老的 objc 中看到它。 -
也看到
IBAction是一个转换为void的宏,对于任何预处理的文件,你不应该有这个问题。你真的应该退后一步,准确分析你想要做什么,为什么编译器不能为你工作? -
我会通过使用 execl 调用 llvm 来做到这一点。
标签: objective-c regex string parsing nsstring