我有以下内容:
extension Data : CustomStringConvertible {
var description : String {
return base64EncodedString()
}
}
这显示一个警告:
Conformance of 'Data' to protocol 'CustomStringConvertible' was already stated in the type's module 'Foundation'
并且由于此警告,Data
无法使用 打印description
。
难道这个不支持吗?
正如Claus Jørgensen 的回答
description
所说,您不能在自己的扩展中“覆盖”协议见证。如果这样做的目的只是为了直接获取
print
数据,那么还有另一种选择。您会看到,
print
不仅仅用于打印值。只是用于确定要打印的字符串,并且首先检查该值是否符合,然后再检查是否符合要求。CustomStringConvertible.description
print
String.init(describing:)
String.init(describing:)
TextOutputStreamable
CustomStringConvertible
幸运的是,
Data
不符合TextOutputStreamable
,所以你可以写话虽如此,但当将来的某个版本符合 时,这就会成为一个问题
Data
。因此TextOutputStreamable
,最好的办法是咬紧牙关,明确地写data.base64EncodedString()
在你的print
调用中。正如错误所说,
Data
已经符合CustomStringConvertible
(和CustomDebugStringConvertible
)因此已经具有description
属性。您不能覆盖此属性(也不能从 Data 继承,因为它是一个结构)
相反,您需要(并且应该)为您的自定义描述创建不同的属性。
例如:
然而,这有点毫无意义,因为您还不如直接调用该方法,除非您的代码还有更多内容。