是否有可能NSLog C结构(像CGRect或CGPoint)?

我希望能够debuggingC结构,而不必显式键入它们组成的每个属性。

即我想能够做到这样的事情:

CGPoint cgPoint = CGPointMake(0,0); NSLog(@"%@",cgPoint); 

显然,'%@'将不起作用,因此是个问题。

你可以试试这个:

 NSLog(@"%@", NSStringFromCGPoint(cgPoint)); 

UIKit提供了很多function,可将各种CG结构转换为NSString 。 它不起作用的原因是因为%@表示一个对象。 CGPoint是一个C结构( CGRectCGSize也是如此)。

有几个function,如:

 NSStringFromCGPoint NSStringFromCGSize NSStringFromCGRect NSStringFromCGAffineTransform NSStringFromUIEdgeInsets 

一个例子:

 NSLog(@"rect1: %@", NSStringFromCGRect(rect1)); 
 NSLog(@"%@", CGRectCreateDictionaryRepresentation(rect)); 

我使用下面的macros来帮助我与NSRect:

 #define LogRect(RECT) NSLog(@"%s: (%0.0f, %0.0f) %0.0fx %0.0f", #RECT, RECT.origin.x, RECT.origin.y, RECT.size.width, RECT.size.height) 

你可以为CGPoint做类似的事情:

 @define LogCGPoint(POINT) NSLog(@"%s: (%0.0f, %0.0f)", #POINT POINT.x, POINT.y); 

使用它如下:

 LogCGPoint(cgPoint); 

会产生以下内容:

 cgPoint: (100, 200) 

你可以使用这个NSValueNSValue对象是单个C或Objective-C数据项的简单容器。 它可以包含任何标量types,如int,float和char,以及指针,结构体和对象标识符。

例:

  CGPoint cgPoint = CGPointMake(10,30); NSLog(@"%@",[NSValue valueWithCGPoint:cgPoint]); 

输出: NSPoint: {10, 30}

希望它可以帮助你。

由于堆栈溢出的坏的RSS刚刚为我复活这个问题,这是我几乎一般的解决scheme: JAValueToString

这可以让你编写JA_DUMP(cgPoint)并获取cgPoint = {0, 0}logging。

是的,您可以使用下面的几个函数:首先,您必须将CGPoint结构转换为string,请参阅示例

1)NSStringFromCGPoint,
2)NSStringFromCGSize,
3)NSStringFromCGRect,
4)NSStringFromCGAffineTransform,
5)NSStringFromUIEdgeInsets,

例如:

1)NSLog(@“NSStringFromCGPoint =%@”,NSStringFromCGRect(cgPointValue));

喜欢这个…

 NSLog(@"%@",CGRectCreateDictionaryRepresentation(rect));