1

我正在观看去年关于自动布局的 WWDC,第 228 次会议。有以下代码:

NSView *previousView = nil
for (NSView *view in letterViews) {
...
  [NSDictionary *views = NSDictionaryOfVariableBindings(previousView, view);
  [NSLayoutConstraint constraintsWithVisualFormat:@"[previousView(==view)]" 
    options:0 metrics:nil views:views]];

字符串值“previousView”和“view”如何在这里使用?该方法实际上可以从名称中计算出对象吗?

TIA 标志

4

1 回答 1

3

不,变量名称并非无处不在。这和 C 一样。

这是正在发生的事情:

NSDictionaryOfVariableBindings只需使用预处理器将其参数转换为NSStrings:

#define NSDictionaryOfVariableBindings(...) \
 _NSDictionaryOfVariableBindings(@"" # __VA_ARGS__, __VA_ARGS__, nil)

也就是说NSDictionaryOfVariableBindings(previousView, view)扩展为:

_NSDictionaryOfVariableBindings(@"" "previousView, view", previousView, view, nil)

NSDictionary它可以通过分割传递给私有函数的字符串参数来简单地创建返回的键_NSDictionaryOfVariableBindings;在这种情况下,该参数扩展为@"previousView, view".

于 2013-05-22T05:29:30.580 回答