2011-12-09 4 views
0

#DEFINEシリーズを使用して、自分のアプリのスタイルオプションを作成できるかどうかは疑問です。#defineを使用してスタイルを作成する

例えば、

#DEFINE style1: backGroundColor = [UIColor: colorNamed whiteColor]; 
txtColor = [UIColor blackColor]; #DEFINE style2.... 

私の質問は:この文の構文は何ですか?

答えて

3

それはアプリのスタイルオプションを作成するためにDEFINEステートメントを使用することは確かに可能ですがプリプロセッサディレクティブの使用のような機能のために理にかなっている場合、私は思ったんだけどスタイルは、プロパティのコレクションになります。 DEFINEステートメントを使用してスタイルを定義すると、最終的にスタイル選択を実行時オプションとしてユーザーに提供することが難しくなります。

代わりに、私はこのためにクラス階層を作成し、それをシングルトンとして実装する方が良いと思う傾向があります。クラス階層を使用すると、ルートクラスの一般的なスタイルビヘイビアを定義し、それから継承して特定のスタイルを実装できます。後で、必要に応じてユーザーにスタイルを選択する機能を公開することができます。

+0

ありがとうRob。それは強く聞こえる。私は似ているコードサンプルを探します。 –

+1

私は最高のものがシングルトンを使用し、色やすべてをxml(plist)ファイルに定義することができます。実行時にスタイルを変更したい場合は、プリプロセッサを使用することはできません。異なるスタイルの異なるアプリケーション・バージョンが必要な場合は、プリプロセッサをお勧めします。 – Sulthan

+0

私は、実行時に設定を変更できるようにするため、これが私にとって最高の解決策だと思っています。私はXMLファイルを作成したので、解析するだけで済みます。みなさんに感謝します。皆さんに私の質問を解決させていただきたいと思います。私はあなたにすべてをマークしました。デビッド –

1

#define backgroundColor [UIColor whiteColor]UIColor *txtColor = backgroundColor;とします。

[UIColor whiteColor]ではなく、whiteColorを定義として使用できますが、上記の例の代わりに[UIColor backgroundColor];を呼び出します。

私はスタイリングを生成するためにこれをしません。コード以外のさまざまな設定を定義することは良いアイデアですが、defineを使用することはかなり拘束力があり、UIからコードを分離する目的を破ります。


#defineには、セミコロンをどこにも置かないでください。プリプロセッサが定義を挿入すると、そのままセミコロンが挿入されます。 プリプロセッサにセミコロンを挿入しないようにします。定義を書くときには、書いている場所のすべてを知っているとは思えないので、インラインで式を書くことができるので、セミコロンを入れてはいけません。

もう1つの方法は、代わりにconstを使用することです。

私が書いたコードでは、文字列リテラル@"literal string"と数字のために#defineがあります。

//static type *const variableName = assignment; 

static NSString *const kConstantString = @"Constant variable"; 

定数は、情報を入力するプリプロセッサを使用していない。他の場所では、私はこのようになりますconst宣言を使用しています。定義に頻繁にアクセスして計算を使用すると、一度だけ格納される定数宣言に適しているかもしれません。

#defineの代わりにconstを使用した他の大きな理由は、プリプロセッサによって処理されるので、defineはタイプチェックされないということです。 Defineは基本的にコンパイラの警告を無効にし、エラーのみを表示します。厳格な警告は非常に有用であり、多くの不満を救うことができます。

+0

洞察をいただきありがとうございます。私はこのようなconstを使ってみました:static NSString * const kBlack = @ "[UIColor:colorNamed blackColor]";しかし、私は互換性のないポインタ型の警告を受け取ります.. –

+0

あなたは文字列の中にメソッド呼び出しを入れています。それはしません。 – JoePasq

+0

これはうまくいきます: '#define defColor [UIColor redColor]'次に 'self.view.backgroundColor = defColor;' – JoePasq

1

はたぶん、あなたはこの構文を探しています:

はどこでもあなたのコード(クラスレベルまたはメソッドレベル、ヘッダーまたは実装ファイル)で、スタイル

 

#define STYLE1 
//#define STYLE2 
 

を設定します。

 

#ifdef STYLE1 
    //code for the first style 
    UIColor* backgroundColor = [UIColor redColor]; 
#elif STYLE2 
    //code for the second style 
    UIColor* backgroundColor = [UIColor greenColor]; 
#else 
    //code for the third style 
    UIColor* backgroundColor = [UIColor clearColor]; 
#endif 

 

Cプリプロセッサについての詳細:http://en.wikipedia.org/wiki/C_preprocessor

+0

Sulthanに感謝します。 "Style1"のコードはどのように見えますか?中括弧に入れたものだけですか? –

+0

完全に何でもかまいません。コンパイル時には、1つのブロックのみがコンパイルされ、他のブロックはコンパイルされません。私は例を挙げます。 – Sulthan

関連する問題