我希望能够调试C结构,而不必显式地键入它们所包含的每个属性。
例如,我希望能够做这样的事情:
CGPoint cgPoint = CGPointMake(0,0);
NSLog(@"%@",cgPoint);
显然'%@'不起作用,因此出现了这个问题。
我希望能够调试C结构,而不必显式地键入它们所包含的每个属性。
例如,我希望能够做这样的事情:
CGPoint cgPoint = CGPointMake(0,0);
NSLog(@"%@",cgPoint);
显然'%@'不起作用,因此出现了这个问题。
当前回答
你可以试试这个:
NSLog(@"%@", NSStringFromCGPoint(cgPoint));
UIKit提供了许多函数,可以将各种CG结构转换为nsstring。它不起作用的原因是%@表示一个对象。CGPoint是一个C结构体(CGRects和CGSizes也是)。
其他回答
我使用下面的宏来帮助我用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)
是的,你可以使用以下几个函数: 首先,您必须将CGPoint结构转换为字符串,参见示例
1) NSStringFromCGPoint,
2) NSStringFromCGSize,
3) NSStringFromCGRect,
4) NSStringFromCGAffineTransform,
5) NSStringFromUIEdgeInsets,
例如:
1) NSLog(@"NSStringFromCGPoint = %@", NSStringFromCGRect(cgPointValue));
像这样…
有几个函数,比如:
NSStringFromCGPoint
NSStringFromCGSize
NSStringFromCGRect
NSStringFromCGAffineTransform
NSStringFromUIEdgeInsets
一个例子:
NSLog(@"rect1: %@", NSStringFromCGRect(rect1));
NSLog(@"%@", CGRectCreateDictionaryRepresentation(rect));
使用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}