Что эквивалентно 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] ));