我希望能够调试C结构,而不必显式地键入它们所包含的每个属性。也就是说,我希望能够做这样的事情:
CGPoint cgPoint = CGPointMake(0,0); NSLog(@"%@",cgPoint);
显然“%@”不起作用,因此提出了这个问题。
ldioqlga1#
您可以尝试以下操作:
NSLog(@"%@", NSStringFromCGPoint(cgPoint));
UIKit提供了许多函数,可以将各种CG结构体转换为NSString。它不起作用的原因是%@表示一个对象。CGPoint是一个C结构体(CGRect和CGSize也是)。
NSString
%@
CGPoint
CGRect
CGSize
kcugc4gi2#
有几个功能,如:
NSStringFromCGPoint NSStringFromCGSize NSStringFromCGRect NSStringFromCGAffineTransform NSStringFromUIEdgeInsets
举个例子:
NSLog(@"rect1: %@", NSStringFromCGRect(rect1));
w46czmvw3#
NSLog(@"%@", CGRectCreateDictionaryRepresentation(rect));
yqlxgs2m4#
我使用以下宏来帮助我解决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)
xkftehaa5#
你可以使用NSValue来实现这个目的。一个NSValue对象是一个简单的容器,用于存放一个C或Objective-C数据项。它可以存放任何标量类型,如int、float和char,以及指针、结构和对象id。
NSValue
范例:
CGPoint cgPoint = CGPointMake(10,30); NSLog(@"%@",[NSValue valueWithCGPoint:cgPoint]);
输出:NSPoint: {10, 30}
NSPoint: {10, 30}
希望对你有帮助。
4bbkushb6#
是的,您可以使用以下几个功能,如:首先,您必须将CGPoint结构转换为字符串,请参见示例
1) NSStringFromCGPoint, 2) NSStringFromCGSize, 3) NSStringFromCGRect, 4) NSStringFromCGAffineTransform, 5) NSStringFromUIEdgeInsets,
例如:
1) NSLog(@"NSStringFromCGPoint = %@", NSStringFromCGRect(cgPointValue));
就像这样...
f87krz0w7#
由于Stack Overflow的坏掉的RSS刚刚为我复活了这个问题,下面是我几乎通用的解决方案:JAValueToString这允许您写入JA_DUMP(cgPoint)并记录cgPoint = {0, 0}。
JA_DUMP(cgPoint)
cgPoint = {0, 0}
jchrr9hc8#
NSLog(@"%@",CGRectCreateDictionaryRepresentation(rect));
ymdaylpp9#
使用Objective-C方法从C原语创建对象
CGRect rect = CGRectMake(1, 2, 3, 4); CGSize size = CGSizeMake(1, 2); NSLog(@"%@, %@",@(rect), @(size));
输出:NSRect:{{1,2},{3,4}},NSSize:{1、2}
9条答案
按热度按时间ldioqlga1#
您可以尝试以下操作:
UIKit提供了许多函数,可以将各种CG结构体转换为
NSString
。它不起作用的原因是%@
表示一个对象。CGPoint
是一个C结构体(CGRect
和CGSize
也是)。kcugc4gi2#
有几个功能,如:
举个例子:
w46czmvw3#
yqlxgs2m4#
我使用以下宏来帮助我解决NSRect问题:
您可以对CGPoint执行类似的操作:
使用方法如下:
会产生以下结果:
xkftehaa5#
你可以使用
NSValue
来实现这个目的。一个NSValue对象是一个简单的容器,用于存放一个C或Objective-C数据项。它可以存放任何标量类型,如int、float和char,以及指针、结构和对象id。范例:
输出:
NSPoint: {10, 30}
希望对你有帮助。
4bbkushb6#
是的,您可以使用以下几个功能,如:首先,您必须将CGPoint结构转换为字符串,请参见示例
例如:
就像这样...
f87krz0w7#
由于Stack Overflow的坏掉的RSS刚刚为我复活了这个问题,下面是我几乎通用的解决方案:JAValueToString
这允许您写入
JA_DUMP(cgPoint)
并记录cgPoint = {0, 0}
。jchrr9hc8#
ymdaylpp9#
使用Objective-C方法从C原语创建对象
输出:NSRect:{{1,2},{3,4}},NSSize:{1、2}