点语法的可可点语法

时间:2011-10-28 02:26:22

标签: objective-c cocoa

可以使用这样的语法:

Object.parent.property

或者我应该将它限制在一个点和一个级别?

3 个答案:

答案 0 :(得分:4)

一般情况下,可以使用:

a.b.c

但是,如果涉及到结构,那么它可能无效。请考虑以下类声明:

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

在这种情况下,centre属性的类型为NSPoint,结构(不是类!)声明了两个成员xy。阅读x坐标有效:

CGFloat x = circle.centre.x;

并且相当于:

CGFloat x = [circle center].x;

但写x坐标不会:

circle.centre.x = 50;

因为分配的左侧部分(称为左值)不可分配。赋值正在尝试更改返回值的成员变量,即[circle centre]返回的结构。

你必须写这个:

NSPoint centre = circle.centre;
centre.x = 50;
circle.centre = centre;

答案 1 :(得分:3)

是的,使用这样的语法是完全正常和常见的。

答案 2 :(得分:2)

是的,没关系,多少级别无关紧要。他们都被翻译成了这个。

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

这相当于:

Object.parent.property.anotherProperty.yetAnotherProperty;

这解释了所有:http://developer.apple.com/library/ios/documentation/cocoa/conceptual/objectivec/Chapters/ocObjectsClasses.html#//apple_ref/doc/uid/TP30001163-CH11-SW17