มีวิธีการที่ฉันสามารถแทนที่ในชั้นเรียนที่กำหนดเองของฉันเพื่อให้เมื่อ
NSLog(@"%@", myObject)
ถูกเรียกมันจะพิมพ์ฟิลด์ (หรืออะไรก็ตามที่ฉันเห็นว่าสำคัญ) ของวัตถุของฉัน ผมคิดว่าผมกำลังมองหาเทียบเท่า Objective-C ของของ toString()Java
มีวิธีการที่ฉันสามารถแทนที่ในชั้นเรียนที่กำหนดเองของฉันเพื่อให้เมื่อ
NSLog(@"%@", myObject)
ถูกเรียกมันจะพิมพ์ฟิลด์ (หรืออะไรก็ตามที่ฉันเห็นว่าสำคัญ) ของวัตถุของฉัน ผมคิดว่าผมกำลังมองหาเทียบเท่า Objective-C ของของ toString()Java
คำตอบ:
มันเป็นdescriptionวิธีการอินสแตนซ์ประกาศเป็น:
- (NSString *)description
นี่คือตัวอย่างการใช้งาน (ขอบคุณ grahamparks):
- (NSString *)description {
return [NSString stringWithFormat: @"Photo: Name=%@ Author=%@", name, author];
}
debugDescriptionลิขสิทธิ์ยัง? แม้ว่าฉันคิดว่าDebugDescriptionควรจะใช้ดีบักเกอร์เช่น LLDB
เพิ่มลงใน@implementationชั้นเรียนของรูปภาพของคุณ:
- (NSString *)description {
return [NSString stringWithFormat:@"Photo: Name=%@ Author=%@",name,author];
}
คุณสามารถแทนที่วิธีคำอธิบายของ NSObject:
- (NSString *)description
ในเรื่องของการเข้าสู่ระบบฉันแนะนำโพสต์บล็อกนี้เพื่อการเข้าสู่ระบบที่ดีขึ้นใน Objective-C
มีสองฟังก์ชั่นที่คุณสามารถใช้ได้
- (NSString*)description
นี้จะปรากฏเมื่อคุณใส่วัตถุของคุณเป็น IE NSLogพารามิเตอร์ ฟังก์ชั่นคำอธิบายอื่น ๆ คือ:
- (NSString*)debugDescription
สิ่งนี้จะถูกเรียกเมื่อคุณทำpo anInstanceOfYourClassในหน้าต่างคำสั่ง debug หากชั้นเรียนของคุณไม่มีdebugDescriptionฟังก์ชั่นก็descriptionจะถูกเรียก
โปรดทราบว่าคลาสพื้นฐานNSObjectได้descriptionนำไปใช้แล้ว แต่มันค่อนข้างเปลือยเปล่า: มันแสดงที่อยู่ของวัตถุเท่านั้น นี่คือเหตุผลที่ฉันแนะนำให้คุณใช้งานdescriptionในชั้นเรียนใด ๆ ที่คุณต้องการรับข้อมูลโดยเฉพาะอย่างยิ่งถ้าคุณใช้descriptionวิธีการในรหัสของคุณ หากคุณใช้descriptionในรหัสของคุณฉันขอแนะนำให้คุณใช้debugDescriptionเช่นกันรวมถึงสร้างdebugDescriptionรายละเอียดเพิ่มเติม
สิ่งนี้จะส่งเสียงที่มี:
NSLog((@"speechVoices:%", [[AVSpeechSynthesisVoice speechVoices] description] ));
descriptionทรัพย์สินถูกสงวนไว้ ... และจะให้ข้อมูลการดีบักที่มีประโยชน์! ในกรณีนี้คุณจะต้องใช้ชื่อวิธีการเฉพาะของคุณเอง