我希望能够调试 C 结构体时,无需逐个输入其所有属性。
例如,我想要做到这样:
例如,我想要做到这样:
CGPoint cgPoint = CGPointMake(0,0);
NSLog(@"%@",cgPoint);
显然 '%@' 不起作用,这也是问题的原因。
CGPoint cgPoint = CGPointMake(0,0);
NSLog(@"%@",cgPoint);
显然 '%@' 不起作用,这也是问题的原因。
你可以尝试这个:
NSLog(@"%@", NSStringFromCGPoint(cgPoint));
UIKit提供了许多函数,用于将不同的CG结构体转换为NSString
。 它不能正常工作的原因是%@
表示一个对象,而CGPoint
是一个C结构体(CGRect
和CGSize
也是结构体)。
NSPoint
类型,然后调用 NSStringFromPoint
方法。例如:NSStringFromPoint(NSPointFromCGPoint(point))
。 - Alex有一些函数,例如:
NSStringFromCGPoint
NSStringFromCGSize
NSStringFromCGRect
NSStringFromCGAffineTransform
NSStringFromUIEdgeInsets
一个例子:NSLog(@"rect1: %@", NSStringFromCGRect(rect1));
NSLog(@"%@", CGRectCreateDictionaryRepresentation(rect));
#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}
希望能对你有所帮助。
是的,您可以使用以下几个函数: 首先,您需要将CGPoint结构转换为字符串,例如:
1) NSStringFromCGPoint,
2) NSStringFromCGSize,
3) NSStringFromCGRect,
4) NSStringFromCGAffineTransform,
5) NSStringFromUIEdgeInsets,
例如:
1) NSLog(@"NSStringFromCGPoint = %@", NSStringFromCGRect(cgPointValue));
Like this...
由于 Stack Overflow 的 RSS 出了问题,这个问题又被我找回来了,所以我提供一个几乎通用的解决方案:JAValueToString
使用它,你可以写 JA_DUMP(cgPoint)
,然后得到 cgPoint = {0, 0}
的日志。
NSLog(@"%@",CGRectCreateDictionaryRepresentation(rect));
CGRect rect = CGRectMake(1, 2, 3, 4);
CGSize size = CGSizeMake(1, 2);
NSLog(@"%@, %@",@(rect), @(size));
输出:NSRect: {{1, 2}, {3, 4}}, NSSize: {1, 2}