我不知道如何提出这个问题。
我想创建一个类似 stringWithFormat:
或 predicateWithFormat:
的方法,即我的方法直接接受参数作为带有格式说明符的字符串。我怎样才能做到这一点?
例如,
-(void) someMethod: (NSString *)str, format;
这样我以后可以这样调用它:
[someObject someMethod:@"String with format %@",anotherString];
这与任何特定上下文无关。
我正在使用类似于 predicateWithFormat
的代码:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name like myName"];
这没有用,但是:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name like 'myName'"];
工作方式类似于:
NSString *str = @"myName";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name like %@",str];
所以这意味着该方法能够理解给定的参数是否在其中使用了格式说明符。我很好奇如何做到这一点?
最佳答案
使用可变参数宏 va_start
、va_end
等:
-(void) someMethod: (NSString *)fmt, ...
{
va_list va;
va_start(va, fmt);
NSString *string = [[NSString alloc] initWithFormat:fmt
arguments:va];
va_end(va);
// Do thing with string
}
要记住的重要一点是,vararg 参数丢失了它们的类型,所以像 printf()
和 [NSString stringWithFormat]
这样的函数使用格式字符串来帮助确定有多少参数有以及如何解释每一个。如果您需要不同的语义,那么您将需要以某种方式提供此信息。
关于objective-c - 如何创建一个直接接受格式字符串作为参数的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11329513/