在Objective-C中,可以向它们的类中添加一个描述方法以帮助调试:
@implementation MyClass - (NSString *)description { return [NSString stringWithFormat:@"<%@: %p,foo = %@>",[self class],foo _foo]; } @end
然后在调试器中,您可以:
po fooClass <MyClass: 0x12938004,foo = "bar">
Swift中的等价物是什么? Swift的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输出?我看过可打印协议:
/// 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)
而我必须显式调用description:
8> println("x = \(x.description)") x = MyClass,foo = 42
有没有更好的办法?