Я хочу иметь возможность отлаживать структуры C, не указывая явно каждое свойство, из которого они состоят.
то есть. Я хочу иметь возможность сделать что-то вроде этого:
CGPoint cgPoint = CGPointMake(0,0);
NSLog(@"%@",cgPoint);
Очевидно, что "% @" не будет работать, следовательно, вопрос.
Вы можете попробовать следующее:
NSLog(@"%@", NSStringFromCGPoint(cgPoint));
Существует ряд функций предоставляемых UIKit, которые преобразуют различные структуры CG в NSString
s. Причина, по которой это не работает, состоит в том, что %@
означает объект. A CGPoint
является структурой C (и, следовательно, CGRect
и CGSize
s).
NSPoint
и затем вызвать NSStringFromPoint
. Например: NSStringFromPoint(NSPointFromCGPoint(point))
Есть несколько функций, таких как:
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, а также указатели, структуры и идентификаторы объектов.
Пример:
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));
Как это...
Так как Stack Overflows broken RSS просто воскресил этот вопрос для меня, это мое почти общее решение: JAValueToString
Это позволяет писать JA_DUMP(cgPoint)
и записывать cgPoint = {0, 0}
.
NSLog(@"%@",CGRectCreateDictionaryRepresentation(rect));