Каков эквивалент Objective-C для “toString()” для использования с NSLog?
-
12-09-2019 - |
Вопрос
Есть ли метод, который я могу переопределить в своих пользовательских классах, чтобы при
NSLog(@"%@", myObject)
вызывается, он напечатает поля (или все, что я считаю важным) моего объекта?Я предполагаю, что я ищу эквивалент Java на Objective-C toString()
.
Решение
Это тот самый description
метод экземпляра, объявленный как:
- (NSString *)description
Вот пример реализации (благодаря grahamparks):
- (NSString *)description {
return [NSString stringWithFormat: @"Photo: Name=%@ Author=%@", name, author];
}
Другие советы
Добавьте это к @implementation
из вашего фотокласса:
- (NSString *)description {
return [NSString stringWithFormat:@"Photo: Name=%@ Author=%@",name,author];
}
Вы можете переопределить метод описания NSObject:
- (NSString *)description
Что касается ведения журнала, я рекомендую следующее запись в блоге для лучшего входа в Objective-C.
Есть две функции, которые вы можете использовать.
- (NSString*)description
Это будет отображаться, когда вы разместите свой объект как, Т.е.параметр для NSLog
.Другой функцией описания является:
- (NSString*)debugDescription
Это будет вызвано, когда вы это сделаете po anInstanceOfYourClass
в окне командной строки debug.Если в вашем классе нет debugDescription
функции, то просто description
будет вызван.
Обратите внимание, что базовый класс NSObject
действительно имеет description
реализовано, но это довольно примитивно:он отображает только адрес объекта.Вот почему я рекомендую вам реализовать description
в любом классе, из которого вы хотите получить информацию, особенно если вы используете description
метод в вашем коде.Если вы используете description
в вашем коде я предлагаю вам реализовать debugDescription
также, также делая debugDescription
более многословный.
При этом будут выведены доступные голоса:
NSLog((@"speechVoices:%", [[AVSpeechSynthesisVoice speechVoices] description] ));