2012-01-02 13 views
2

私はこの単純な質問に対する答えをすべて探してきましたが、運がありません。 Objective-Cでは、ドット表記を使用せずに、つまり正規のメッセージ構文のみを使用して、オブジェクトの構造体値にアクセスできますか? (Objective Cでドット表記を使用して構造値にアクセスする必要がありますか?

//Particle.m 
#import "Particle.h" 
@implementation Particle 
@synthesize position; 
@end 

そして、いくつかの他の* .Mファイルであるとします

//Particle.h 
@interface Particle : NSObject { 
CGPoint position 
} 
@property CGPoint position; 
@end 

と対応する実装:たとえば、のは、パーティクルオブジェクトに定義された位置、我々はするCGPointインスタンス変数を持っているとしましょう我々が持っている)AppController.mを言う:次に

a_particle = [Particle alloc]; 
[a_particle setPosition:CGPointMake(x_val,y_val)]; 

はなぜ我々は使用できません。

[[a_particle position] x]; 

x_val得るのではなくします

a_paticle.position.x; 

は、後者が正常に動作していることに注目?また、

でも動作しますが、私はドット表記で混乱するのを避けようとしています。私の勘違いは、構造体インスタンス変数がその値にアクセスするためにドット表記法を使用しなければならない(この場合はx_valとy_val)、これは本当ですか?

答えて

6

CGPointは、目的のCクラスではなく、メッセージを送信できない単純な古いC structです。構造体の読み込みにはCの構文を使用する必要があります。つまり、 '。'

+0

ありがとう、これは私が疑ったものですが、私のコードを点で乱雑にしないようにしようとしていました。 –

+1

それは混乱ではなく、単なるC言語です。 – sbooth

4

これはできません。メンバー演算子は、structsのメンバーにアクセスするためのC演算子です。

Objective-Cのメソッドは、同じメソッド呼び出し構文はない Objective-Cの種類があるstruct値、上で動作するため、したがって、それは不可能である、Objective-Cのタイプで動作します。

+0

Jacobに感謝、私はあなたの説明も好きです。 –

5

構造がCからのものであり、したがって、伝統のCメソッドを使用してアクセスする必要があります(Objective-Cランタイムは、それが現在ない、と私は将来的にはそうではないことを願っています。これは、それをサポートしていない限り)。あなたは.を使用して構造体のフィールドにアクセスするか、->を使用してそれらの参照を解除し、それを行う唯一の方法です。メッセージを渡すことはObjective-Cのことであり、Objective-Cのオブジェクトではないので実際には意味がありません。

+0

ありがとう、ジェイソン、良い説明。 –

関連する問題