0

ユーザーが適切にフォーマットされた SQL ステートメント文字列を作成できるようにする SQL ステートメント クラスを作成しています。このクラスには、メソッド -(id)initWithFormat:(NSString *)format, ... があり、NSString 可変引数メソッドと同じように機能する必要があります。ただし、1 つ変更したいのは、引数として渡された 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 メソッドに含める方法がわかりません。誰でもこれを達成する方法を教えてもらえますか? フォーマット文字列の各文字をステップ実行し、% で始まる文字を見つけ、何らかの方法で switch ステートメントを使用して正しいタイプを NSMutableString に追加することで、NSString initWithFormat 機能をエミュレートすることを考えましたが、これは非常に複雑に思えます (つまり、一部のフォーマット指定子は2 文字以上 (例: 符号付き 16 ビット整数 %hi および関数は、%1$@ などの位置指定子を考慮する必要があります)。

私が見たすべての可変個引数チュートリアルは、nil で終わるリストに集中しており、initWithFormat を効果的にエミュレートする方法を示していません (Apple からの技術的な Q&A を含め、一見「可変数の引数を取るメソッドを書くにはどうすればよいですか? NSString の +stringWithFormat:?" )。

前もって感謝します。

4

0 に答える 0