Возможно ли NSLog C Структуры (Как CGRect или CGPoint)? - PullRequest
407 голосов
/ 15 февраля 2009

Я хочу иметь возможность отлаживать структуры C без необходимости явно вводить каждое свойство, из которого они состоят.

т.е. Я хочу иметь возможность сделать что-то вроде этого:

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

Очевидно, что '% @' не будет работать, поэтому вопрос.

Ответы [ 8 ]

797 голосов
/ 15 февраля 2009

Вы можете попробовать это:

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

Существует ряд функций , предоставляемых UIKit , которые преобразуют различные структуры CG в NSString с. Причина, по которой это не работает, заключается в том, что %@ означает объект. CGPoint является структурой C (как и CGRect s и CGSize s).

229 голосов
/ 04 марта 2011

Есть несколько функций, таких как:

NSStringFromCGPoint  
NSStringFromCGSize  
NSStringFromCGRect  
NSStringFromCGAffineTransform  
NSStringFromUIEdgeInsets

Пример:

NSLog(@"rect1: %@", NSStringFromCGRect(rect1));
16 голосов
/ 20 ноября 2012
NSLog(@"%@", CGRectCreateDictionaryRepresentation(rect));
13 голосов
/ 15 февраля 2009

Я использую следующий макрос, чтобы помочь мне с 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)
9 голосов
/ 08 июля 2013

Вы можете использовать NSValue для этого. Объект NSValue представляет собой простой контейнер для одного элемента данных C или Objective-C. Он может содержать любые скалярные типы, такие как int, float и char, а также указатели, структуры и идентификаторы объектов.

Пример:

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

ВЫХОД: NSPoint: {10, 30}

Надеюсь, это поможет вам.

5 голосов
/ 10 марта 2017

Да, вы можете использовать ниже несколько функций, таких как: Сначала вы должны преобразовать структуру CGPoint в строку, см. Пример

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

Например:

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

Вот так ...

5 голосов
/ 13 июня 2011

Поскольку неработающий RSS в Stack Overflow воскресил для меня этот вопрос, вот мое почти общее решение: JAValueToString

Это позволяет писать JA_DUMP(cgPoint) и регистрировать cgPoint = {0, 0}.

3 голосов
/ 30 марта 2016
NSLog(@"%@",CGRectCreateDictionaryRepresentation(rect));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...