什么是Swift等价的 – [NSObject description]?

在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

有没有更好的办法?

通过一些实验,我发现Printable和DebugPrintable协议在编译实际应用程序时工作,而不是在REPL或Playground中工作。

Side注意:你写的代码是正确的,但在这种情况下,你可能正在寻找DebugPrintable

Swift已经将这些协议重命名customstringconvertible和CustomDebugStringConvertible – 虽然编译器目前有帮助地告诉你它做了:)

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...