几年后我回到了Objective-C,我觉得很困惑,发现这段代码编译:
- (void)viewDidLoad {
[super viewDidLoad];
NSView* view = self.view. superview;
}
请注意self.view
和superview
之间的空格。其他替代方案也可以用作例如:
NSView* view = self.view .superview
或更深奥的:
NSView * superView = self . view . superview;
忽略点之前/之后的空格。
为什么编译器没有抛出错误?
答案 0 :(得分:1)
此行为是标准C.在可能的情况下会忽略空格。
一种可能的用途是使长密钥路径更具可读性,即:
NSString *firstName =
employee.
person.
name.
firstName;
这种特殊语法特征的实际用处是值得商榷的,但C(特别是Objective-C)总是采用对严格性的压抑性/灵活性。