Как я могу проверить объект с объектом? - PullRequest
6 голосов
/ 30 августа 2010

В рубине я могу .инспектировать объект, чтобы узнать детали.Как я могу сделать подобное в цели c?Спасибо.

Ответы [ 5 ]

5 голосов
/ 30 августа 2010

Если вы просто хотите что-то напечатать, вы можете использовать description, как было сказано ранее.

Я сам не Ruby, но если я правильно понимаю, .inspect в Ruby печатает весь экземплярпеременные объекта.Это не то, что встроено в Какао.Если вам это нужно, вы можете использовать систему времени выполнения для запроса этой информации.

Вот краткая категория, которую я собрал, которая делает это:

#import <objc/objc-class.h>

@interface NSObject (InspectAsInRuby)

- (NSString *) inspect;

@end

@implementation  NSObject (InspectAsInRuby)

- (NSString *) inspect;
{
    NSMutableString *result = [NSMutableString stringWithFormat: @"<%@:%p", NSStringFromClass( [self class] ), self ];

    unsigned ivarCount = 0;
    Ivar *ivarList = class_copyIvarList( [self class], &ivarCount );

    for (unsigned i = 0; i < ivarCount; i++) {
        NSString *varName = [NSString stringWithUTF8String: ivar_getName( ivarList[i] )];
        [result appendFormat: @" %@=%@", varName, [self valueForKey: varName]];
    }

    [result appendString: @">"];

    free( ivarList );

    return result;
}

@end
5 голосов
/ 30 августа 2010

-[NSObject description] предоставляет базовое описание объекта (аналогично toString в Java - я действительно не знаю о .inspect в Ruby).description вызывается автоматически, когда вы печатаете объект в NSLog (например, NSLog(@"@%", myObject)).

Для других методов самоанализа я бы предложил посмотреть ссылку NSObject Есть также много вещей, которые вы можете сделать напрямую с помощью среды выполнения Objective-C .

2 голосов
/ 30 августа 2010

Просто распечатайте его с помощью NSLog

NSLog(@"%@", myObject);

Он автоматически вызовет метод description объекта. Если это класс, который вы создали, вы захотите определить его (верните NSString с информацией).

Взгляните на этот вопрос .

1 голос
/ 18 июня 2015

В h-файле вашего NSObject напишите:

  • (NSDictionary *) dictionaryRepresentation;

В m-файле вашего NSObject напишите:

  • (NSDictionary *) dictionaryRepresentation {unsigned int count = 0;// Получить список всех свойств в классе.objc_property_t * properties = class_copyPropertyList ([self class], & count);

    NSMutableDictionary * dictionary = [[NSMutableDictionary alloc] initWithCapacity: count];

    для (int i = 0; i

    // Only add to the NSDictionary if it's not nil.
    if (value)
        [dictionary setObject:value forKey:key];
    

    }

    free (свойства);

    return dictionary;}

  • (NSString *) description {return [NSString stringWithFormat: @ "% @", [self dictionaryRepresentation]];}

1 голос
/ 30 августа 2010

Метод описания NSObject аналогичен инспектированию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...