在objective-c中是否可以使用变量名的字符串版本?

时间:2013-05-22 05:19:06

标签: objective-c nslayoutconstraint

我正在观看去年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 标记

1 个答案:

答案 0 :(得分:3)

不,变量名称无处不在。这跟C一样。

以下是发生的事情:

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

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

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

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

通过将传递给私有函数NSDictionary的字符串参数除以后,可以简单地创建返回的_NSDictionaryOfVariableBindings密钥;在这种情况下,该参数会扩展为@"previousView, view"