ドットシンタックスのココアドットシンタックス

次のような構文を使用しても構いません:

Object.parent.property

または私は1つのドットと1つのレベルに制限する必要がありますか?

2
demeterの法則を調べる: en.wikipedia.org/wiki/Law_of_Demeter
追加された 著者 Mitch Wheat,
ウィキペディアのページはとても役に立ちました!ありがとう。
追加された 著者 user1017624,

3 答え

一般的には、次のように使用してください。

a.b.c

しかし、それに関係する構造があれば、それはうまくいかないかもしれません。次のクラス宣言を考えてみましょう。

@interface Circle : NSObject
@property (assign) NSPoint centre;
@end

この場合、 center プロパティは、 xという2つのメンバを宣言する構造体(クラスではありません)の NSPoint > y x 座標の読み取りは次のようになります。

CGFloat x = circle.centre.x;

以下と同等です:

CGFloat x = [circle center].x;

x 座標を書くことはできません:

circle.centre.x = 50;

左辺値と呼ばれる代入の左辺は割り当てできないためです。代入は戻り値のメンバ変数、つまり [circle center] によって返される構造体を変更しようとしています。

代わりにこれを書かなければなりません:

NSPoint centre = circle.centre;
centre.x = 50;
circle.centre = centre;
4
追加された

はい、そのような構文を使用するのは完全に上質で一般的です。

3
追加された

はい、それは大丈夫です、どのくらいのレベルに関係なくです。彼らはすべてこれに翻訳されます。

[[[[Object parent] property] anotherProperty] yetAnotherProperty]

これはこれと同等です:

Object.parent.property.anotherProperty.yetAnotherProperty;

This explains it all: http://developer.apple.com/library/ios/documentation/cocoa/conceptual/objectivec/Chapters/ocObjectsClasses.html#//apple_ref/doc/uid/TP30001163-CH11-SW17

2
追加された