我正在编写一个 SQL 语句类,它允许用户创建格式正确的 SQL 语句字符串。这个类将有一个方法 -(id)initWithFormat:(NSString *)format, ... 需要像 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 结尾的列表上,并没有展示如何有效地模拟 initWithFormat (包括来自 Apple 的技术问答,其标题为“我如何编写一个采用可变数量参数的方法,例如NSString 的 +stringWithFormat:?" )。
提前致谢。