14
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

NSString stringWithFormatにおける、position指定

Last updated at Posted at 2014-02-20

NSStringのformat指定

NSStringおよびNSLogのフォーマットには、IEEE準拠のposition指定を使うことができます。
クラスリファレンスをよく読んでみると、さらっと書いてあります。大事なことなのに。

String Format Specifiers

Note that you can also use the “n$” positional specifiers such as %1$@ %2$s. For more details, see the IEEE printf specification. 

今までもこの機能を多言語対応で使っていたのですが、今日新たな発見を二つしました。

  1. 同じポジションを複数回使用できる
  2. ポジション指定をしない引数があっても良い

もしかしたら常識なのかもしれませんが、僕的には大きな発見です。

プログラム

    NSLog(@"%d %d %d",1,2,3);
    NSLog(@"%3$d %1$d %2$d",1,2,3);
    NSLog(@"%1$d %2$d %1$d %2$d",1,2,3);

実行結果

1 2 3
3 1 2
1 2 1 2

プログラム中では多めにパラメータを定義しておいて、フォーマット側で使う変数を決めるというテクニックは、多言語対応で大きな威力を発揮しそうです。

カテゴリによるNSString拡張

僕の手元では下記のようなカテゴリを使うことにしました。

@interface NSString (BTKExtention)

+ (id) btkStringWithFormat:(NSString*)format
                      dict:(NSDictionary*)params;

@end

これを使うと、

Here is variable %1$@!

のように書いていたフォーマットを

Here is variable %argname$@!

のように書けます。超快適。

やっつけで書いてしまったので実装は非公開で。。。
もしこの記事のストックが100件になったら実装も整理して公開します:-p

14
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?