3

这很棒:

 NSArray *myArray = @[0, M_PI];
 NSDictionary *myDict = @{@"item":anItem, @"another":somethingElse};
 //etc.

但这很乏味:

[baseline moveToPoint:NSPointFromCGPoint(CGPointMake(0, baselinePosition))];
[baseline lineToPoint:NSPointFromCGPoint(CGPointMake(self.bounds.size.width, baselinePosition))];

有什么@(0, 0)可以简化在代码中编写点文字的方法吗?

4

2 回答 2

13

C99 复合文字的救援:

(CGPoint){ 0, 0 }

或者

(NSPoint){ 0, 0 }
于 2013-07-29T17:25:01.627 回答
1

正如 H2CO3 指出的那样,您可以只转换一个文字 - 这是普通的旧 C,而NSPoints 和CGPoints 只是 C 结构。这里没什么好看的。

因此,没有现代或其他的 Objective-C 快捷方式,但有一个旧的宏,与您想出的序列相比,它可以为您节省一些击键:

NSMakePoint(self.bounds.size.width, baselinePosition)

您会注意到 Cocoa API 中使用的旧宏和各种常量遵循自然的英语单词顺序:

NSMakeRect(), NSMakeRange(), etc.

和选项(例如, in NSString

NSAnchoredSearch, NSNumericSearch, NSCaseInsensitiveSearch, etc.

这些选项共有的概念(“搜索”)被添加到符号名称的末尾,就像设计 NSString 类时的约定一样。

更现代的 API 使用命名约定,因此属于同一“组”的名称以相同的单词开头。这使得按字母顺序排列更容易,并极大地帮助自动完成功能建议参数值的可能选项。例如,您可以在 NSOperation 中看到这一点。

于 2013-07-29T18:12:37.347 回答