是否可以对C结构(如CGRect或CGPoint)进行NSLog?

llycmphe  于 2022-12-03  发布在  其他
关注(0)|答案(9)|浏览(111)

我希望能够调试C结构,而不必显式地键入它们所包含的每个属性。
也就是说,我希望能够做这样的事情:

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

显然“%@”不起作用,因此提出了这个问题。

ldioqlga

ldioqlga1#

您可以尝试以下操作:

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

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

kcugc4gi

kcugc4gi2#

有几个功能,如:

NSStringFromCGPoint  
NSStringFromCGSize  
NSStringFromCGRect  
NSStringFromCGAffineTransform  
NSStringFromUIEdgeInsets

举个例子:

NSLog(@"rect1: %@", NSStringFromCGRect(rect1));
w46czmvw

w46czmvw3#

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

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)
xkftehaa

xkftehaa5#

你可以使用NSValue来实现这个目的。一个NSValue对象是一个简单的容器,用于存放一个C或Objective-C数据项。它可以存放任何标量类型,如int、float和char,以及指针、结构和对象id。

范例:

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

输出:NSPoint: {10, 30}

希望对你有帮助。

4bbkushb

4bbkushb6#

是的,您可以使用以下几个功能,如:首先,您必须将CGPoint结构转换为字符串,请参见示例

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

例如:

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

就像这样...

f87krz0w

f87krz0w7#

由于Stack Overflow的坏掉的RSS刚刚为我复活了这个问题,下面是我几乎通用的解决方案:JAValueToString
这允许您写入JA_DUMP(cgPoint)并记录cgPoint = {0, 0}

jchrr9hc

jchrr9hc8#

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

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}

相关问题