我希望能够调试 C 结构,而不必显式键入它们所包含的每个属性。
即我希望能够做这样的事情:
CGPoint cgPoint = CGPointMake(0,0);
NSLog(@"%@",cgPoint);
显然 '%@' 不起作用,因此问题。
你可以试试这个:
NSLog(@"%@", NSStringFromCGPoint(cgPoint));
有许多函数 provided by UIKit 可以将各种 CG 结构转换为 NSString
。它不起作用的原因是因为 %@
表示一个对象。 CGPoint
是 C 结构(CGRect
和 CGSize
也是如此)。
有几个功能,例如:
NSStringFromCGPoint
NSStringFromCGSize
NSStringFromCGRect
NSStringFromCGAffineTransform
NSStringFromUIEdgeInsets
一个例子:
NSLog(@"rect1: %@", NSStringFromCGRect(rect1));
NSLog(@"%@", CGRectCreateDictionaryRepresentation(rect));
我使用以下宏来帮助我解决 NSRect:
#define LogRect(RECT) NSLog(@"%s: (%0.0f, %0.0f) %0.0f x %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 数据项的简单容器。它可以保存任何标量类型,例如 int、float 和 char,以及指针、结构和对象 ID。
例子:
CGPoint cgPoint = CGPointMake(10,30);
NSLog(@"%@",[NSValue valueWithCGPoint:cgPoint]);
输出: NSPoint: {10, 30}
希望它可以帮助你。
由于 Stack Overflow 损坏的 RSS 刚刚为我重新提出了这个问题,所以这是我几乎通用的解决方案:JAValueToString
这使您可以编写 JA_DUMP(cgPoint)
并记录 cgPoint = {0, 0}
。
是的,您可以使用以下几个函数,例如:首先您必须将 CGPoint 结构转换为字符串,请参见示例
1) NSStringFromCGPoint,
2) NSStringFromCGSize,
3) NSStringFromCGRect,
4) NSStringFromCGAffineTransform,
5) NSStringFromUIEdgeInsets,
例如:
1) NSLog(@"NSStringFromCGPoint = %@", NSStringFromCGRect(cgPointValue));
像这样...
NSLog(@"%@",CGRectCreateDictionaryRepresentation(rect));
NSPoint
,然后调用NSStringFromPoint
。例如:NSStringFromPoint(NSPointFromCGPoint(point))