ऑब्जेक्टिव-सी में, कोई description
डिबगिंग में सहायता करने के लिए अपनी कक्षा में एक विधि जोड़ सकता है :
@implementation MyClass
- (NSString *)description
{
return [NSString stringWithFormat:@"<%@: %p, foo = %@>", [self class], foo _foo];
}
@end
फिर डिबगर में, आप कर सकते हैं:
po fooClass
<MyClass: 0x12938004, foo = "bar">
स्विफ्ट में समतुल्य क्या है? स्विफ्ट का REPL आउटपुट मददगार हो सकता है:
1> class MyClass { let foo = 42 }
2>
3> let x = MyClass()
x: MyClass = {
foo = 42
}
लेकिन मैं कंसोल पर मुद्रण के लिए इस व्यवहार को ओवरराइड करना चाहता हूं:
4> println("x = \(x)")
x = C11lldb_expr_07MyClass (has 1 child)
क्या इस println
आउटपुट को साफ करने का कोई तरीका है ? मैंने Printable
प्रोटोकॉल देखा है:
/// This protocol should be adopted by types that wish to customize their
/// textual representation. This textual representation is used when objects
/// are written to an `OutputStream`.
protocol Printable {
var description: String { get }
}
मुझे लगा कि यह स्वचालित रूप से "देखा" जाएगा, println
लेकिन ऐसा प्रतीत नहीं होता है:
1> class MyClass: Printable {
2. let foo = 42
3. var description: String { get { return "MyClass, foo = \(foo)" } }
4. }
5>
6> let x = MyClass()
x: MyClass = {
foo = 42
}
7> println("x = \(x)")
x = C11lldb_expr_07MyClass (has 1 child)
और इसके बजाय मुझे स्पष्ट रूप से वर्णन करना होगा:
8> println("x = \(x.description)")
x = MyClass, foo = 42
क्या कोई बेहतर तरीका है?