我正在编写一个SQL语句类,允许用户创建格式正确的SQL语句字符串。这个类将有一个方法 - (id)initWithFormat:(NSString *)格式,......需要像NSString可变参数方法一样工作。但是,我要改变的一件事是,作为参数传递的任何NSString必须由initWithFormat自动转义。
例如,在初始化这样的语句之后(注意字符串参数有一个需要转义的“'”):
MyStatement *statement = [[MyStatement alloc] initWithFormat:@"UPDATE myTable SET myField = %@ WHERE myID = %lu", @"David's Room", 1234];
结果语句字符串应为:
@"UPDATE myTable SET myField = "David\'s Room WHERE myID = 1234"
编写函数来转义字符串很容易,但我无法弄清楚如何在initWithFormat方法中包含它。谁能告诉我如何实现这一目标?我已经考虑通过逐步遍历格式字符串的每个字符来模拟NSString initWithFormat功能,找到以%开头的任何字符,并以某种方式使用switch语句将正确的类型附加到NSMutableString但这似乎过于复杂(即一些格式说明符是超过1个字符,例如有符号的16位整数%hi,该函数应考虑位置说明符,例如%1 $ @等。
我看到的所有可变参数教程都集中在nil-terminated列表上,并没有展示如何有效地模拟initWithFormat(包括Apple的技术Q& A,标题为"How can I write a method that takes a variable number of arguments, like NSString's +stringWithFormat:?")。
提前致谢。