カスタムクラスでオーバーライドできるメソッドがあるので、
_ NSLog(@"%@", myObject)
_
が呼び出され、それは私のオブジェクトのフィールド(または私が重要だと思うもの)を印刷しますか? JavaのtoString()
に相当するObjective-Cを探していると思います。
次のように宣言されたdescription
インスタンスメソッドです。
- (NSString *)description
実装例は次のとおりです(grahamparksに感謝):
- (NSString *)description {
return [NSString stringWithFormat: @"Photo: Name=%@ Author=%@", name, author];
}
これをPhotoクラスの@implementation
に追加します。
- (NSString *)description {
return [NSString stringWithFormat:@"Photo: Name=%@ Author=%@",name,author];
}
NSObjectのdescriptionメソッドをオーバーライドできます。
- (NSString *)description
ロギングのテーマについては、Objective-Cでのロギングを改善するために、この ブログ投稿 をお勧めします。
使用できる関数は2つあります。
- (NSString*)description
これは、オブジェクトをI.E.として配置すると表示されます。 NSLog
のパラメーター。他の記述関数は次のとおりです。
- (NSString*)debugDescription
これは、デバッグコマンドウィンドウでpo anInstanceOfYourClass
を実行すると呼び出されます。クラスにdebugDescription
関数がない場合は、description
のみが呼び出されます。
基本クラスNSObject
にはdescription
が実装されていることに注意してください。ただし、基本クラスであり、オブジェクトのアドレスのみを表示します。そのため、特にコードでdescription
メソッドを使用する場合は、情報を取得するクラスにdescription
を実装することをお勧めします。コードでdescription
を使用する場合は、debugDescription
も実装し、debugDescription
をより冗長にすることをお勧めします。
これにより、利用可能な音声が出力されます。
NSLog((@"speechVoices:%", [[AVSpeechSynthesisVoice speechVoices] description] ));