Что эквивалентно Objective-C для "toString()", для использования с NSLog?

Есть ли способ, который я могу переопределить в своих пользовательских классах, чтобы

      NSLog(@"%@", myObject) 

он будет печатать поля (или что-то, что я считаю важным) моего объекта? Я предполагаю, что я ищу эквивалент Objective-C Java toString().

Ответ 1

Это метод экземпляра description, объявленный как:

- (NSString *)description

Вот пример реализации (спасибо grahamparks):

- (NSString *)description {
   return [NSString stringWithFormat: @"Photo: Name=%@ Author=%@", name, author];
}

Ответ 2

Добавьте это к @implementation вашего класса Photo:

- (NSString *)description {
   return [NSString stringWithFormat:@"Photo: Name=%@ Author=%@",name,author];
}

Ответ 3

Вы можете переопределить метод описания NSObject:

- (NSString *)description

В отношении ведения журнала я рекомендую этот пост в блоге для лучшего входа в систему Objective-C.

Ответ 4

Существуют две функции, которые вы можете использовать.

- (NSString*)description

Это будет отображаться, когда вы поместите свой объект как, I.E. параметр для NSLog. Другая функция описания:

- (NSString*)debugDescription

Это будет вызываться, когда вы делаете po anInstanceOfYourClass в окне командной строки отладки. Если ваш класс не имеет функции debugDescription, тогда будет вызван только description.

Обратите внимание, что базовый класс NSObject реализован description, но он довольно голый: он отображает только адрес объекта. Поэтому я рекомендую вам реализовать description в любом классе, из которого вы хотите получить информацию, особенно если вы используете метод description в своем коде. Если вы используете description в своем коде, я предлагаю вам реализовать debugDescription, а также сделать debugDescription более подробным.

Ответ 5

Это выведет доступные голоса:

    NSLog((@"speechVoices:%", [[AVSpeechSynthesisVoice speechVoices] description] ));