0

c# では、宣言しobject o;てから割り当てることができます。o=(float)5.0;またはo="a string."、Objective-C に相当するものはありますか? 使ってみたidのですが、float や integer のようなプリミティブ型は取りません。助けてくれてありがとう。

4

5 に答える 5

12

Objective-C には、CLR の言葉にある「統一型システム」がありません。言い換えれば、C のスーパーセットとして、Objective-C のプリミティブ型は、オブジェクト インスタンスとはまったく別物です。このid型は、任意のオブジェクト インスタンスへの参照 (実際には OS X/iPhone Objective-C ランタイムのポインター) を格納できます。C のプリミティブ型 (など) はint、 typefloatでラップするNSValueNSNumber、 type に割り当てる必要がありますid。もちろん、これはまさに C# コンパイラが行っていることです。C# では、(un)boxing 変換を明示的に行う必要がないというだけです。

すぐに、次のようなコード

float val;
id obj = [NSNumber numberWithFloat:val];
...
float v = [obj floatValue];

残念ながら、現代の基準では冗長である場合、第二の性質になります。

于 2010-05-27T23:13:29.713 に答える
3

そんなことはありません。NSNumberまたはを使用して、NSValueネイティブデータ型をオブジェクトとして処理できます。 NSString文字列を実行します。これらすべてをid型付き変数に割り当てることができますが、正しいクラスのinitメソッドを使用してそれらを作成する必要があります。

于 2010-05-27T22:58:23.913 に答える
3

あなたは正しいです、idObjCオブジェクト参照に対してのみ機能します。id参照でintを参照する場合は、それをボックスに入れる必要がありますNSNumber。ちなみに、C#はこれらのプリミティブもボックス化しており、自動的に実行しているだけです。

于 2010-05-27T22:58:47.267 に答える
2

私の時代には、void ポインターを使用するために、上り坂の雪の中を 15 マイル歩く必要がありました。おっと、StackOverflow はありませんでした。

于 2010-05-27T23:20:00.190 に答える