[Objective-C] 共通関数をまとめたクラスを作ろう!
公開日:
:
最終更新日:2014/08/09
iPhone App 開発, Objective-C iPhone App, objective-c
Warning: Use of undefined constant user_level - assumed 'user_level' (this will throw an Error in a future version of PHP) in /home/users/1/juny/web/hidef/wp-content/plugins/ultimate-google-analytics/ultimate_ga.php on line 524
共通クラスとは?
アプリを作っていると「この処理何回も書いてるなー」ということが多々あると思います。
そんなときはなるべく共通ファイルにまとめて管理しやすくしましょう。
関数を再利用することによって、保守性や品質も高まります。
大げさな自作フレームワークを作るのも面倒だし、とりあえず自分用の共通クラスを作ってみようっていう話です。
実際に作ってみよう!
たとえば、以下のように日付型のオブジェクトから文字列型に変換する処理があるとします。
NSDate *date = [[NSDate alloc] init]; NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"yyyy/MM/dd"]; [formatter setCalendar:[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]]; [formatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"] ]; NSString *strDate = [formatter stringFromDate:date]; NSLog(@"%@", strDate);
- 1行目:日付オブジェクトを生成します。デフォルトは今日の日付になります。
- 2行目:日付フォーマットを生成します。
- 3行目:どんな日付を出力するかフォーマットを決めます。この場合は”yyyy/MM/dd”という書式を設定し、例えば今日だったら”2014/08/06”
- 4行目:グレゴリオ暦のカレンダーを設定します。
- 5行目:USのロケールを設定します。
- 6行目:変換したいNSDate型オブジェクトを設定したフォーマットで文字列変換します。
- 7行目:日付をコンソールに出力します。
こんな冗長な処理を何回も書くのは面倒ですよね。
そこで日付に関連した処理をまとめるためにファイルを作成します。
テンプレートはObjective-C class、クラス名はDateUtils、スーパークラスはNSObjectとしました。
次に、先ほどの処理を関数にまとめるときに、なるべくほかのクラスでも使えるように引数を用意します。
この場合、日付オブジェクト(NSDate)と日付フォーマット(NSString)を使って、日付文字列を取得するようにします。
DateUtils.h(ヘッダーファイル)です。
#import <Foundation/Foundation.h> @interface DateUtils : NSObject + (NSString *)toString:(NSDate *)date format:(NSString *)formatString; @end
DateUtils.m(実装ファイル)はこのようになります。関数名はtoStringとしました。
#import "DateUtils.h" @implementation DateUtils + (NSString *)toString:(NSDate *)date format:(NSString *)formatString { NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:formatString]; [formatter setCalendar:[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]]; [formatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"] ]; return [formatter stringFromDate:date]; } @end
- 5行目:メソッドの宣言になります。この場合、静的なメソッドとしたいのでマイナス記号(-)ではなくプラス記号(+)としました。共通関数に関しては自分自身のインスタンスを必要としない場合であれば、静的メソッドが望ましく思います。
- 7〜10行目:[省略]
- 11行目:引数として受け取った日付(NSDate)、日付フォーマット(NSString)で文字列として変換して返却します。
以上で共通クラスは完了です。実際に呼び出すときには下記のように記述します。
#import "DateUtils.h" NSDate *date = [[NSDate alloc] init]; NSLog(@"%@", [DateUtils toString:date format:@"yyyy/MM/dd"]);
ずいぶんスッキリしましたね!
またこの処理を使うときがあっても、この関数を呼び出すだけでOKです!
まとめ
共通化することによって、簡潔でわかりやすくなりました。
もしも処理を変更したい場合があっても、編集する箇所は共通クラスだけで済みます。
同じように、共通の定数をまとめたクラスを作るのもオススメです。
ad
関連記事
-
-
iPhoneApp WorkManager公開されました!
きっとリジェクトされるんだろうなと思いながら申請を出して1週間。 本日、公開のメールが届きまし
-
-
[Objective-C] デリゲート (Delegate)を理解する!
デリゲートとは? デリゲートに関しての意味合いとして、”委譲”とか”代理”と説明されることが多いで
-
-
App開発をはじめてみました。
はじめてみたはいいものの、右も左もわからず、書籍を読みあさり、ネットを徘徊し、いろんなことを調べ上げ
-
-
TabBarControllerとNavigationControllerのボタン追加
TabBarとNavigationを同時に使っているViewControllerの場合、naviga
-
-
[Swift] スクリーンサイズを取得する
スクリーンサイズを取得 iPhoneの幅と高さを取得する関数を紹介します。 iOS8から画面の傾
-
-
[Swift] Asset Catalogについて
XCode5から追加されたAsset Catalog。 いままで標準のImages.xcasset
-
-
小さなことからコツコツと
これまでHTMLとCSSだけで生きてきただけあって、プログラム言語がいまいちわからない。 Mo
-
-
[Swift] CoreDataで検索したデータを削除する
CoreDataの検索と削除 前の投稿 CoreDataを使ってみる をふまえて今度は検索&削除
-
-
[iPhone App] WorkManager 1.2.0版がリリースされました。
新機能 以前から要望などが多かったものを元に、機能を追加いたしました。 新バージョンで追加された