【发布时间】:2014-07-29 07:20:41
【问题描述】:
在 Objective-C 中,可以将description 方法添加到他们的类中以帮助调试:
@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 输出?我见过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
有没有更好的办法?
【问题讨论】:
标签: swift