是否有可能NSLog C结构(像CGRect或CGPoint)?
我希望能够debuggingC结构,而不必显式键入它们组成的每个属性。
即我想能够做到这样的事情:
CGPoint cgPoint = CGPointMake(0,0); NSLog(@"%@",cgPoint);
显然,'%@'将不起作用,因此是个问题。
你可以试试这个:
NSLog(@"%@", NSStringFromCGPoint(cgPoint));
UIKit提供了很多function,可将各种CG结构转换为NSString
。 它不起作用的原因是因为%@
表示一个对象。 CGPoint
是一个C结构( CGRect
和CGSize
也是如此)。
有几个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)
你可以使用这个NSValue
。 NSValue对象是单个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));