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

[Objective-C] 共通関数をまとめたクラスを作ろう!

公開日: : 最終更新日:2014/08/09 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としました。

スクリーンショット 2014-08-06 13.39.20

スクリーンショット 2014-08-06 13.39.50

 

次に、先ほどの処理を関数にまとめるときに、なるべくほかのクラスでも使えるように引数を用意します。
この場合、日付オブジェクト(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

関連記事

[Objective-C] no architectures to compile for … のコンパイルエラーについて

起動したプロジェクトでコンパイルエラーが出ました。 no architectures to com

記事を読む

[Swift] プロパティリスト(plist)を使ってCoreDataで一括登録する

プロパティリストを使う 初期データやあらかじめ用意したデータを一括登録したい場合、プロパティリスト

記事を読む

NSDateを5分刻み・15分刻みで丸める

NsDateを初期値としてUIDatePicker等に設定する場合、日付の丸め処理が必要になるのでメ

記事を読む

[Objective-C] デリゲート (Delegate)を理解する!

デリゲートとは? デリゲートに関しての意味合いとして、”委譲”とか”代理”と説明されることが多いで

記事を読む

[iPhone App]WorkManager アップデートしました。

Processing For App Storeでやきもきした僕です。こんにちわ。 今

記事を読む

[Swift] スクリーンサイズを取得する

スクリーンサイズを取得 iPhoneの幅と高さを取得する関数を紹介します。 iOS8から画面の傾

記事を読む

[Swift] プロパティリスト(plist)の値を取得

plistからデータを取得してみます。 こちらのエントリーも参考にしてみてください。 プロパテ

記事を読む

[Swift] Swiftでいろんなfor文まとめてみた

いろんなfor文 プログラム作成で必ず出てくるfor文を自分なりにまとめてみました。 Swift

記事を読む

no image

迷走継続中!

どうも、僕です。 相変わらず迷走中な訳ですが、新たに迷走アイテムを入手しました。 その名

記事を読む

[Swift] 画像を合成する

画像を合成 以下の2つの画像を合成してみます。円と四角です。 画像をプロジェクトに追

記事を読む

ad

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

ad

[PHP] curl転送してみる(googleに)

curlでgoogle画像検索APIにアクセスしてみます。 cu

[PHP] PDOでMySQLの接続確認をする

PDO PHPでMySQLに接続する際には、mysql_connec

[PHP] ランダムな英数字を生成する

便利系メソッド 今回はPHPでランダムな英数字を作成してみます。

[Swift] プロパティリスト(plist)の値を取得

plistからデータを取得してみます。 こちらのエントリーも参考にし

[Swift] Asset Catalogについて

XCode5から追加されたAsset Catalog。 いままで標準

→もっと見る

  • 1978年の七夕生まれ。 25才でweb業界の門を叩き、28才でフリーランスに。 現在は、フリーランスでマークアップ中心に、wordpressのカスタマイズやデザインをしております。 また、iPhoneアプリの開発もしております。

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
PAGE TOP ↑

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