Objective-C ที่เทียบเท่าสำหรับ“ toString ()” สำหรับใช้กับ NSLog คืออะไร


170

มีวิธีการที่ฉันสามารถแทนที่ในชั้นเรียนที่กำหนดเองของฉันเพื่อให้เมื่อ

      NSLog(@"%@", myObject) 

ถูกเรียกมันจะพิมพ์ฟิลด์ (หรืออะไรก็ตามที่ฉันเห็นว่าสำคัญ) ของวัตถุของฉัน ผมคิดว่าผมกำลังมองหาเทียบเท่า Objective-C ของของ toString()Java

คำตอบ:


250

มันเป็นdescriptionวิธีการอินสแตนซ์ประกาศเป็น:

- (NSString *)description

นี่คือตัวอย่างการใช้งาน (ขอบคุณ grahamparks):

- (NSString *)description {
   return [NSString stringWithFormat: @"Photo: Name=%@ Author=%@", name, author];
}

5
หมายเหตุหากคุณกำลังใช้ CoreData descriptionทรัพย์สินถูกสงวนไว้ ... และจะให้ข้อมูลการดีบักที่มีประโยชน์! ในกรณีนี้คุณจะต้องใช้ชื่อวิธีการเฉพาะของคุณเอง
Nuthatch

เป็นdebugDescriptionลิขสิทธิ์ยัง? แม้ว่าฉันคิดว่าDebugDescriptionควรจะใช้ดีบักเกอร์เช่น LLDB
MaddTheSane

36

เพิ่มลงใน@implementationชั้นเรียนของรูปภาพของคุณ:

- (NSString *)description {
   return [NSString stringWithFormat:@"Photo: Name=%@ Author=%@",name,author];
}

24

คุณสามารถแทนที่วิธีคำอธิบายของ NSObject:

- (NSString *)description

ในเรื่องของการเข้าสู่ระบบฉันแนะนำโพสต์บล็อกนี้เพื่อการเข้าสู่ระบบที่ดีขึ้นใน Objective-C


4
นี่ไม่ใช่วิธีการคงที่ใช่หรือไม่ ฉันต้องการให้สิ่งนี้ทำงานกับวัตถุมากกว่าชั้นเรียน ตัวอย่างเช่นถ้าฉันมีคลาส "ภาพถ่าย" ที่มีฟิลด์ "ชื่อ" และ "ผู้เขียน" ฉันต้องการให้ NSLog พิมพ์ฟิลด์เหล่านั้นตามที่ได้รับมอบหมายในวัตถุ
George Armhold

2
ใช่ - ด่างดี - ฉันกดปุ่มผิด ฉันควรให้ความสนใจมากขึ้นเมื่อพิสูจน์การอ่านคำตอบของฉัน โชคดีที่มีคนตาของพวกเขาบนลูกบอล :-)
teabot

13

มีสองฟังก์ชั่นที่คุณสามารถใช้ได้

- (NSString*)description

นี้จะปรากฏเมื่อคุณใส่วัตถุของคุณเป็น IE NSLogพารามิเตอร์ ฟังก์ชั่นคำอธิบายอื่น ๆ คือ:

- (NSString*)debugDescription

สิ่งนี้จะถูกเรียกเมื่อคุณทำpo anInstanceOfYourClassในหน้าต่างคำสั่ง debug หากชั้นเรียนของคุณไม่มีdebugDescriptionฟังก์ชั่นก็descriptionจะถูกเรียก

โปรดทราบว่าคลาสพื้นฐานNSObjectได้descriptionนำไปใช้แล้ว แต่มันค่อนข้างเปลือยเปล่า: มันแสดงที่อยู่ของวัตถุเท่านั้น นี่คือเหตุผลที่ฉันแนะนำให้คุณใช้งานdescriptionในชั้นเรียนใด ๆ ที่คุณต้องการรับข้อมูลโดยเฉพาะอย่างยิ่งถ้าคุณใช้descriptionวิธีการในรหัสของคุณ หากคุณใช้descriptionในรหัสของคุณฉันขอแนะนำให้คุณใช้debugDescriptionเช่นกันรวมถึงสร้างdebugDescriptionรายละเอียดเพิ่มเติม


1

สิ่งนี้จะส่งเสียงที่มี:

    NSLog((@"speechVoices:%", [[AVSpeechSynthesisVoice speechVoices] description] ));
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.