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