[Objective-C] 共通関数をまとめたクラスを作ろう!
公開日:
:
最終更新日:2014/08/09
iPhone App 開発, Objective-C iPhone App, objective-c
共通クラスとは?
アプリを作っていると「この処理何回も書いてるなー」ということが多々あると思います。
そんなときはなるべく共通ファイルにまとめて管理しやすくしましょう。
関数を再利用することによって、保守性や品質も高まります。
大げさな自作フレームワークを作るのも面倒だし、とりあえず自分用の共通クラスを作ってみようっていう話です。
実際に作ってみよう!
たとえば、以下のように日付型のオブジェクトから文字列型に変換する処理があるとします。
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週間。 本日、公開のメールが届きまし
-
-
[Swift] frameworkについて
先日、Swiftで実装されたライブラリをまとめたサイトを発見しました。 Swift Toolb
-
-
[Swift] CoreDataのテーブルからデータ件数を取得する
件数を取得する fetchResultsControllerなどを使わず、直接テーブルのデータ件数
-
-
[Objective-C] デリゲート (Delegate)を理解する!
デリゲートとは? デリゲートに関しての意味合いとして、”委譲”とか”代理”と説明されることが多いで
-
-
[Swift] UITabBarControllerでタブ選択時のイベントを取得する
UITabBarController タブを使った画面を作成する場合はUITabBarContro
-
-
[Swift] 定数クラスをつくってみる
Objective-cの場合 今回は共通にする定数をまとめるクラスを作ってみます。 まずはO
-
-
NSDateを5分刻み・15分刻みで丸める
NsDateを初期値としてUIDatePicker等に設定する場合、日付の丸め処理が必要になるのでメ
-
-
[Swift] プロパティリスト(plist)の値を取得
plistからデータを取得してみます。 こちらのエントリーも参考にしてみてください。 プロパテ