【问题标题】:Are string versions of variable names available in objective-c?Objective-c 中是否提供字符串版本的变量名?
【发布时间】:2013-05-22 14:11:20
【问题描述】:

我正在观看去年关于自动布局的 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 标记

【问题讨论】:

    标签: objective-c nslayoutconstraint


    【解决方案1】:

    不,变量名称并非无处不在。这就像 C。

    这是发生了什么:

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

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

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

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

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

    【讨论】:

    • 谢谢。又被那个旧的预处理器愚弄了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-22
    • 1970-01-01
    • 1970-01-01
    • 2012-05-02
    • 2019-12-16
    • 2015-05-12
    • 2010-11-09
    相关资源
    最近更新 更多