在Swift中访问CustomStringConvertible的默认实现

时间:2016-01-07 23:46:22

标签: swift swift2 protocols

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

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

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

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

我希望显示一些额外的内容,例如x的值,而无需再次输入Bar.Baz

这可能吗?

1 个答案:

答案 0 :(得分:3)

您使用的大多数类具有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的类只打印类名。