【问题标题】:Objective C: how to get the string equivalent, or variable name of a method argument call目标 C:如何获取字符串等价物或方法参数调用的变量名
【发布时间】:2013-01-08 11:56:18
【问题描述】:

我想做一个简单的方法来记录视图的框架,但也记录特定视图输入的名称。除了输入字符串作为方法的参数之外,是否有一种简单的方法可以获取与被调用视图等效的字符串?

-(void)printViewFrame:(UIView*)view { 

    NSLog(@"%@'s frame is: origin x: %f, origin y: %f, size x: %f, size y: %f", view ,view.frame.origin.x, view.frame.origin.y, view.frame.size.width, view.frame.size.height);

}

[self printViewFrame:myView];

注意:现在我只是这样做,这有点难看:

-(void)printViewFrame:(UIView*)view name:(NSString*)name {

    NSLog(@"%@'s frame: %@",name, NSStringFromCGRect(view.frame));

}

【问题讨论】:

  • “字符串等价物”是什么意思?能举个例子吗?
  • 是的,换句话说,我上面的日志中的第一件事是“myView”,然后是原点 x , y 和大小 x, y。
  • 查看姓名?这是什么意思?
  • 您是否正在寻找一种方法来打印传递给该方法的变量的名称?
  • 是的变量。我想是的,对不起,应该这样说。

标签: ios uiview frame nslog


【解决方案1】:

要获取视图的框架,您可以使用NSStringFromCGRect

NSLog(@"%@",NSStringFromCGRect(view.frame));

但是如果你想得到视图的名字,你必须把它作为一个 NSString 传递。您只能读取指针的内存地址,而不能读取它的真实名称。最接近这个的是

NSLog(@"%@",NSStringFromClass([view class]));

哪个会输出

界面视图

【讨论】:

  • 谢谢,打印出方法的名称。我正在寻找变量。
  • @Mrwolfy 哦,我不认为这是可能的。
【解决方案2】:

你的方法调用

[self printViewFrame:myView];

方法实现

-(void)printViewFrame:(UIView*)view { 

    NSLog(@"%@ : %@", NSStringFromCGRect(view.frame),NSStringFromClass(view.class));

}

【讨论】:

  • 只是寻找变量名。我可以很容易地做到这一点,但我必须输入名称作为字符串。我想知道是否有一个聪明的方法来捕捉这个名字。
  • 我已经编辑了答案,请检查是否对您有帮助
【解决方案3】:

我认为实现所需功能的唯一可能方法是在调用 -(void)printViewFrame: 方法之前记录变量的名称

【讨论】:

    【解决方案4】:

    我不知道如何用一些标准函数来做到这一点,但我可以用宏来做到这一点:

    #define PRINT_NAME(var) NSLog(@"%s", #var)
    

    然后,您只需调用它,它就会打印出变量的名称:

    PRINT_NAME(view);
    

    您也可以使用它来获取具有所需名称的NSString

    #define GET_NAME_STRING(var) [NSString stringWithFormat:@"%s", #var]
    

    像这样使用它:

    NSLog(@"frame stuff %f,...., NAME IS %@", frame.x, ..., GET_NAME_STRING(view));
    

    如果您只需要一种(或一些)方法,您可以做一些定义来做您想做的事:

    #define CALL_PRINT(var) NSLog(@"%s", #var); [self printViewFrame:var]
    

    所以,当你打电话时

    CALL_PRINT(myView);
    

    它将打印视图名称,然后调用printViewFrame 函数。

    另外,如果您不想对宏执行任何操作,请在此处找到:name of UIView that was touched

    【讨论】:

    • 所以它会打印“view”,不是吗?
    • 我的意思是它的输出总是一样的。 “查看”,仅此而已
    • 你不懂。提问者想知道究竟是什么变量被传递给了方法。但是由于您在方法内打印它,因此变量的名称将始终是“视图”,这不是提问者需要的
    • 是的,我现在明白你的意思了。我认为不做任何其他事情是不可能的。
    猜你喜欢
    • 2017-08-24
    • 2017-12-28
    • 1970-01-01
    • 2017-04-06
    • 1970-01-01
    • 2010-12-25
    • 1970-01-01
    • 2016-10-04
    • 2012-05-17
    相关资源
    最近更新 更多