Ios 目标C:如何获取方法参数调用的字符串等价物或变量名

Ios 目标C:如何获取方法参数调用的字符串等价物或变量名,ios,uiview,frame,nslog,Ios,Uiview,Frame,Nslog,我想创建一个简单的方法,记录视图的框架,但也记录特定视图输入的名称。除了将字符串作为参数输入到方法之外,还有没有一种简单的方法可以获得被调用视图的字符串等价物 -(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, vi

我想创建一个简单的方法,记录视图的框架,但也记录特定视图输入的名称。除了将字符串作为参数输入到方法之外,还有没有一种简单的方法可以获得被调用视图的字符串等价物

-(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));

}

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

NSLog(@"%@",NSStringFromCGRect(view.frame));
但是,如果要获取视图的名称,则必须将其作为NSString传递。您只能读取指针的内存地址,而不能读取它的真实名称。最接近这一点的是

NSLog(@"%@",NSStringFromClass([view class]));
哪个会输出

UIView

您的方法调用

[self printViewFrame:myView];
方法实现

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

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

}

我认为实现所需功能的唯一可能方法是在调用
-(void)printViewFrame:
方法之前记录变量名称,我不知道如何使用一些标准函数来实现这一点,但我可以使用宏:

#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
函数


此外,如果您不想对宏执行任何操作,请在此处找到一些内容:。

您所说的“字符串等价物”是什么意思?你能举个例子吗?是的,换句话说,我上面日志中的第一个内容是“myView”,后面是原点x,y和大小x,y。视图名称?这是什么意思?您正在寻找一种打印传递给方法的变量名称的方法吗?是的。我想是的,对不起,应该这样说。谢谢,这会打印出方法的名称。我在找变量。@Wolfy Ohh先生,我不认为这是可能的。只是找变量名。我可以很容易地做到这一点,但我必须输入一个字符串的名称。我想知道是否有一个聪明的方法来捕捉这个名字。我已经编辑了答案,请检查这是否对你有帮助。所以它会打印“视图”,不是吗?我的意思是它的输出总是一样的。“视图”和其他你不懂的东西。提问者想知道到底传递给方法的变量是什么。但是,由于你在方法中打印它,变量的名称将始终是“视图”,这不是提问者需要的。是的,我现在明白你的意思了。我认为不做任何其他事情是不可能的。