フェンリル

Developer's Blog

文字列を Objective-C っぽくクールに作る

こんにちは。Sleipnir 3 for Mac 開発担当の福井です。

Mac/iOS エンジニアのみなさん、突然ですがコーディング中に文字列を作るとき、NSString の API はきちんと使えていますか?ちょっとした文字の追加に NSMutableString を作ったり、[NSString stringWithFormat:] を使って新しく文字列を作ったりしていませんか?できているけど少しむりやりでなにかダサい、そんなコード書いていませんか?多くのパターンでは Foundation の API を使うことでより簡潔に表現することができます。基本の API を的確に使って、ワンランク上のエンジニアを目指しましょう。

文字列の追加

冒頭でも触れましたが、ちょっと文字列を追加したいというケースはよくあると思います。しかし、いちいち編集用の NSMutableString を作ったり、[NSString stringWithFormat:] で新しい NSString を生成するのはちょっと野暮です。そこで、[NSString stringByAppendingString:] を使ってみましょう。編集用の NSMutableString を作るパターンに比べるとコード量は格段に減ります。また、[NSString stringwWithFormat:] を使うパターンに比べ、特定の文字列を足したという用途が読み手に明確に伝わりますのでよりリーダブルなコードになります。数値を文字列に足したいときなどには、フォーマット文字列を使用できる、[NSString stringByAppendingFormat:] を使いましょう。

HTTP リクエストパラメータの生成

HTTP のリクエストパラメータなどの特定の文字で区切られている文字列を生成するときには [NSArray componentsJoinedByString:] を使いましょう。NSMutableString を使うと、どうしても for 文中で何度も [string appendFormat:@”&%@”, p] を呼ぶことになって不恰好ですが、これを使えばさくっとスタイリッシュに書き下すことができます。さりげなくデキるエンジニアであることをアピールできるポイントですので確実に拾っていきましょう。

NSString ではなくて NSArray にあるところが全くもって日の当たらない便利メソッドポイントですね。Objective-C には変なところに便利メソッドがあるので、リファレンスは穴があくほど眺めるのがオススメです。ちなみに、特定文字で区切られた文字列を分解するときには [NSString componentsSeparatedByString:] の出番です。

URLなどの末尾にパスを追加する

URL やファイルパスの末尾にパスを追加するときには [NSString stringByAppendingPathComponent:] が使えます。なにより、末尾に / が入っているかどうかも考慮して処理してくれるので、自分で処理するより安全に文字列操作をすることができます。また、[NSString pathWithComponents:] で NSArray から直接 / 区切りの文字列を作ることもできます。

ファイルパスの生成はあまり頻繁にあるものではありませんが、NSString にはファイルパスを生成するための API がゴマンと存在します。それらの API を確実に使いこなすことのできるようにシッカリと復習しておきましょう。

まとめ

Foundation の API を使ってできるクールな文字列生成について紹介しました。みなさんも是非自分のプロダクトで使ってみてください!

Sleipnir for Mac のダウンロードはこちら

Sleipnir の Facebook ページでは、ユーザーの方たちとのコミュニケーションや最新情報の投稿などを行なっています。よろしければいいね!してください!

Facebook コメント

コメント

offshore corporations2012年11月09日 2:01

配列・連想配列の書き方とか[]の使い方とか気持ち悪いけど、whileやらforやらは他の言語とだいたい同じ。メモリの管理は autorelase は推奨されていないようなんだけど、じゃあなんで存在しているの?とか思いつつ、次はクラスのことを勉強しよう。

名前(必須)

メールアドレス(必須)

URL

スタイル用のタグが使えます

このコメント欄でのご質問、ご要望には、開発チームから回答できない場合があります。ご質問、ご要望は「User Community」内のフォーラムまでお寄せください。