0

私は iOS 開発にかなり慣れていないので、この問題を処理する良い方法があるかどうかを知りたいと思っています。基本的に、ユーザー入力パラメータに基づいて製品仕様を返す技術計算機を作成しています。問題の製品には、一部のユーザー パラメーターの仕様がありますが、すべてではありません。const double定数ファイルには、またはである一連の ATTEN_SPEC_X 変数がありますconst NSString *。さて、仕様が欠けていてもまったく問題ないので、返された仕様を報告する前に、NSArray のさまざまな型を保持する機能を活用し、後でイントロスペクションを使用して文字列と double を処理することを計画しました。

これは、私が実装している 1 つの方法の不完全な例です。specとの最終値の 2 要素配列を返す必要があるのは、単なる大きな条件ツリーですnominal

- (NSArray *)attenuatorSwitching:(double *)attenuator{
double spec, nominal;
{...}
    else if (*attenuator==0){
        spec=ATTEN_SPEC_3;     //this atten spec is a string!
        nominal=ATTEN_NOM_3;
    }
{...}
return {array of spec, nominal} //not actual obj-c code

では、spec と公称 double を作成する代わりに、それらを他の一般的な型にすることはできますか? ここで本当に重要なことは、このメソッド内で特別な処理を使用したくないということです。別のコーダーは、定数ファイルに戻り、ATTEN_NOM_3 を double に変更でき、このメソッドを再構築する必要はまったくありません。

ありがとう。

4

1 に答える 1

3

遭遇する問題は、NSArrays がdoubles を直接処理できないことです。ただし、代わりに NSNumber インスタンスを使用し始めると、これを回避できます。 anおよび anNSArray *を含む を問題なく返すことができます。さらに一般的な型付けが必要な場合は、Objective-C 型を任意のオブジェクト インスタンスに使用できます (ただし、プリミティブを使用することはできません。 a をanにすることはできません)。NSString *NSNumber *iddoubleid

後で配列を取得するときに、NSObject メソッド-isKindOfClass:を使用して、配列から取得するオブジェクトのタイプを判別し、結果のタイプに応じて文字列または数値を処理できます。NSNumber を double に戻す必要がある場合は、NSNumber インスタンス メソッド-doubleValueを使用して double をアンボックスします。(+[NSNumber numberWithDouble:]逆に、double から NSNumber を取得します。)

十分に新しいバージョンの Xcode を使用している場合は、あちこちに呼び出しを散らかさなくても、これらをリテラルにすることもできます+numberWithDouble:

return @[ @3, @"number of things" ]
于 2012-09-01T00:01:30.760 に答える