4

メソッドなどを呼び出すときにパラメーターを取得する方法を尋ねているわけではありません。

私はこのようなものが欲しい:

-(void)doSomethingWithType:(TYPE)type {

//do something

}

そして次のように実行されます:

[self doSomethingWithType:int];

また

[self doSomethingWithType:BOOL];

パラメータとして型を持つメソッド/関数のパラメータを作成するにはどうすればよいですか? 私はあらゆるタイプを意味します.. :)

私はint型のパラメータを作りたくありません.int型のパラメータを作りたいのですが、目的のc型を値や変数ではなくパラメータとして書きます:)

ありがとう!

4

3 に答える 3

7

あなたの意図を正しく理解しているかどうかわかりませんが、Objective-C にはクラス「クラス」があります。

-(void)doSomethingWithType:(Class)type {
    //do something
    //for example, create an instance of this type:
    id object = [[type alloc] init];
}

そして、次のように呼び出すことができます。

[objectOfMyClass doSomethingWithType: [SomeObjectiveCType class]];

ただし、プリミティブ型では機能しません。BOOL、int、float などを意味します。Objective-C クラスのみ。それが役立つことを願っています。それがあなたが探しているものではない場合は申し訳ありません。

于 2013-06-13T20:08:57.763 に答える
6

型はC や Objective-C ではファースト クラスではないため、関数に渡すことはできません。

Objective-C コードは通常、それらを のchar *ようなもので として表します@encode。たとえば、次のようになります。

- (void)doSomethingWithType:(char *)encodedType {
    NSLog(@"Got type %s", encodedType);
}

[self doSomethingWithType:@encode(int)];

Apple Docs@encodeで何をするかを見ることができます。

別の方法として、(メソッドではなく) マクロを使用して、任意のソース テキストをパラメーターとして取り、新しいコードを作成する方法があります。例えば:

#define MY_MACRO(SYMBOL, TYPE) DoSomething(#SYMBOL, (TYPE *)&SYMBOL)

次のように使用します。

MY_MACRO(foo, int);

これは次のコードと同等です。

DoSomething("foo", (int *)&foo);

マクロの SYMBOL の前の「#」は、「これから文字列を作成する」ことを意味します。マクロを作成する際には、非常に多くの落とし穴があることに注意してください。最初にそれらの優れた入門書を探してグーグルで検索することを強くお勧めします.

于 2013-06-13T17:53:04.573 に答える
1
  1. Apple フレームワークは通常、@encode. Apple によって定義された形式は、プリミティブ型の配列を記述することさえできます。長所 - かなり標準的です。短所 - メソッドを呼び出す前に型をエンコードするコードを追加し、メソッドにデコードを追加する必要があります。

  2. 必要なタイプごとに個別のメソッドを用意してください。短所 - 多くの方法。長所 - 読みやすいコード、使いやすいコード。

  3. メソッドではなくマクロ。マクロは、型名を含む任意のパラメーターを取ることができます。短所 - 読みにくいコード、長所 - 短いコード、使いやすいコード。

ただし、どのソリューションも完璧ではありません。このようなものが必要な場合、ほとんどの場合、設計が非常に貧弱であることが原因です。

于 2013-06-13T19:57:22.443 に答える