Возможно ли NSLog C Структуры (например, CGRect или CGPoint)?

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

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

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

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

вопрос задан 15.02.2009
mazniak
2919 репутация

8 ответов


  • 786 рейтинг

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

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

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

    ответ дан Alex, с репутацией 25677, 15.02.2009
  • 225 рейтинг

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

    NSStringFromCGPoint  
    NSStringFromCGSize  
    NSStringFromCGRect  
    NSStringFromCGAffineTransform  
    NSStringFromUIEdgeInsets
    

    Пример:

    NSLog(@"rect1: %@", NSStringFromCGRect(rect1));
    
    ответ дан steve, с репутацией 2271, 4.03.2011
  • 16 рейтинг
    NSLog(@"%@", CGRectCreateDictionaryRepresentation(rect));
    
    ответ дан Abhishek Bedi, с репутацией 2510, 20.11.2012
  • 13 рейтинг

    Я использую следующий макрос, чтобы помочь мне с 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)
    
    ответ дан e.James, с репутацией 79902, 15.02.2009
  • 9 рейтинг

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

    Пример:

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

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

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

    ответ дан Nishant Tyagi, с репутацией 8877, 8.07.2013
  • 5 рейтинг

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

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

    ответ дан Jens Ayton, с репутацией 13870, 13.06.2011
  • 5 рейтинг

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

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

    Например:

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

    Вот так. , ,

    ответ дан Vaibhav Shiledar, с репутацией 649, 10.03.2017
  • 3 рейтинг
    NSLog(@"%@",CGRectCreateDictionaryRepresentation(rect));
    
    ответ дан Uday.M, с репутацией 1134, 30.03.2016