c# では、宣言しobject o;
てから割り当てることができます。o=(float)5.0;
またはo="a string."
、Objective-C に相当するものはありますか? 使ってみたid
のですが、float や integer のようなプリミティブ型は取りません。助けてくれてありがとう。
5 に答える
Objective-C には、CLR の言葉にある「統一型システム」がありません。言い換えれば、C のスーパーセットとして、Objective-C のプリミティブ型は、オブジェクト インスタンスとはまったく別物です。このid
型は、任意のオブジェクト インスタンスへの参照 (実際には OS X/iPhone Objective-C ランタイムのポインター) を格納できます。C のプリミティブ型 (など) はint
、 typefloat
でラップするNSValue
かNSNumber
、 type に割り当てる必要がありますid
。もちろん、これはまさに C# コンパイラが行っていることです。C# では、(un)boxing 変換を明示的に行う必要がないというだけです。
すぐに、次のようなコード
float val;
id obj = [NSNumber numberWithFloat:val];
...
float v = [obj floatValue];
残念ながら、現代の基準では冗長である場合、第二の性質になります。
そんなことはありません。NSNumber
またはを使用して、NSValue
ネイティブデータ型をオブジェクトとして処理できます。 NSString
文字列を実行します。これらすべてをid
型付き変数に割り当てることができますが、正しいクラスのinit
メソッドを使用してそれらを作成する必要があります。
あなたは正しいです、id
ObjCオブジェクト参照に対してのみ機能します。id参照でintを参照する場合は、それをボックスに入れる必要がありますNSNumber
。ちなみに、C#はこれらのプリミティブもボックス化しており、自動的に実行しているだけです。
私の時代には、void ポインターを使用するために、上り坂の雪の中を 15 マイル歩く必要がありました。おっと、StackOverflow はありませんでした。