当前位置: 首页 > 知识库问答 >
问题:

Swift的等价物是什么-[NSObject描述]?

董品
2023-03-14
@implementation MyClass
- (NSString *)description
{
    return [NSString stringWithFormat:@"<%@: %p, foo = %@>", [self class], foo _foo];
}
@end
po fooClass
<MyClass: 0x12938004, foo = "bar">
  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

共有1个答案

哈扬
2023-03-14

要在Swift类型上实现此功能,必须实现CustomStringConvertable协议,然后实现名为Description的字符串属性。

例如:

class MyClass: CustomStringConvertible {
    let foo = 42

    var description: String {
        return "<\(type(of: self)): foo = \(foo)>"
    }
}

print(MyClass()) // prints: <MyClass: foo = 42>

注意:type(of:self)获取当前实例的类型,而不是显式地编写'MyClass'。

 类似资料:
  • 我想按节组织我的代码。通常我使用,但当我试图在.swift文件中这样做时,它就不起作用了。 所以我的问题是,我是否能够以某种方式启用它,如果不能,那么如何在.swift文件中组织代码?

  • 我仍然在学习和试验JavaFX中的GUIs,我似乎无法得到我所希望的“外观”…我试图在一个面板中分组几个标签,然后在另一个面板中添加另一个标签。但我似乎不知道如何在JavaFX中正确使用“JPanels”? 如有任何帮助,将不胜感激 编辑:这是我试图通过尝试不同的布局来实现的,但运气仍然不好

  • 在Mac和Windows上,可以使用 <罢工> (替换 )和 (替换 ) (Docker 18.03+)位于容器内。 对于Linux来说,有没有一个可以在不传递env变量或使用各种CLI命令提取它的情况下开箱即用的方法?

  • 我们有以下场景:使用Sonarqube扫描Windows10中的两个项目。 null 提前谢了。

  • 我看到Kotlin有,它们相当于Java中的。 现在我想知道,是否有等价于Java的?

  • 这里的答案引用了一个包含所有完全未来方法的表,但这并不是我要找的,或者我可能搞错了。 我正在寻找Streams'peek()的完全未来等价物,因此基本上是一个返回输入参数的,或者一个不返回的。我认为有两种方法都不能在语义上准确地表达我的意图,但可以做到这一点: 和 两者都从上一个阶段获取输入,允许我执行一个操作并以相同的类型返回到下一个阶段。在这两种方法中,后一种方法将我的时间限制在其他事情完成时