【问题标题】:Access default implementation of CustomStringConvertible in Swift在 Swift 中访问 CustomStringConvertible 的默认实现
【发布时间】:2016-01-07 23:46:21
【问题描述】:

我想通过添加一些额外的输出来扩展我的classCustomStringConvertible 协议的默认行为。

例如,假设您在名为 Bar 的项目中有这个 class

class Baz {
   let x = 42
}
let b = Baz()

当执行po(b) 时,输出将是Bar.Baz

我想显示一些额外的东西,例如x 的值,而不必再次输入 Bar.Baz

这可能吗?

【问题讨论】:

  • 请向我们展示一个示例,说明您在打印自定义类时希望发生什么。
  • 协议没有默认实现,每个类/结构都必须实现自己的版本
  • @AlexPopov 我刚刚编辑了问题
  • 好问题,但仍然没有直接答案。它可以以某种方式重新打开吗?

标签: swift swift2 protocols


【解决方案1】:

您使用的大多数类都具有CustomStringConvertible 的默认实现的原因是因为NSObject(所有Obj-C 类的超类)实现了它。

如果你已经定义了自己的 Swift 基类,你必须先声明它符合CustomStringConvertible 然后实现它,例如

class Dog: CustomStringConvertible {
  // some code and stuff here
  var name = "Bobby"

  // conform to CustomStringConvertible
  var description: String {
    return "\(NSStringFromClass(self.dynamicType)) \(name)"
  }
}

print(Dog()) // outputs: "__lldb_expr_70.Dog Bobby" in Playground

不符合CustomStringConvertible 的类只打印类名。

【讨论】:

  • 我的类没有继承自 NSObject。
  • 我明白你在做什么。添加解决方案来回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-30
  • 2015-09-22
  • 2014-09-30
  • 1970-01-01
  • 1970-01-01
  • 2014-12-03
  • 1970-01-01
相关资源
最近更新 更多