มีวิธีการที่ฉันสามารถแทนที่ในชั้นเรียนที่กำหนดเองของฉันเพื่อให้เมื่อ
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
ทรัพย์สินถูกสงวนไว้ ... และจะให้ข้อมูลการดีบักที่มีประโยชน์! ในกรณีนี้คุณจะต้องใช้ชื่อวิธีการเฉพาะของคุณเอง