LoginSignup
6

More than 5 years have passed since last update.

NSStringリテラルのあれやこれ

Last updated at Posted at 2014-05-01

NSStringリテラルのあれやこれ

NSStringリテラルってのは

NSString *string = @"hoge";

これのことです。
これについてのアレな機能とバグのご紹介。

アレな機能とは、C言語の文字列のように、文字列連結ができること。
つまりこう書けます。

NSString *string = @"hoge" @"huga";

これは、こう書くのと同じです。

NSString *string = @"hogehuga";

なにが便利なのか。
ついこの間JavaScriptCoreでJavaScript書きました。こんな感じ。

NSString *script =
@"var iframe = document.getElementById('game_frame');"
@"var validIframe = 0;"
@"if(iframe) {"
@"    validIframe = 1;"
@"    var rect = iframe.getBoundingClientRect();"
@"    var atop = rect.top;"
@"    var aleft = rect.left;"
@"}";

便利。(内容は気にしないでね)

ちょっとしたバグ。

NSStringリテラルの連結はNSStringリテラルを空白文字区切りで並べて書きます。
が、なぜかこれでもエラーが出ずに連結できます。

NSString *string = @"hoge" "huga";

hugaの方はNSStringリテラルではなくC言語の文字列です。

NSString *string = @"hoge" "huga" @"foo" "bar" "hoge";

でも連結できます。
最初の文字列がNSStringリテラルなら後ろの並びには関係なく連結可能です。


追記:
バグを紹介したのはコンパイラのバージョンアップでいきなりコンパイル不能になる時限爆弾を仕込んでしまわないための注意喚起です。
このバグで遊んでみよう!とかではありません。

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
6