Eu tenho o seguinte:
extension Data : CustomStringConvertible {
var description : String {
return base64EncodedString()
}
}
Isto mostra um aviso:
Conformance of 'Data' to protocol 'CustomStringConvertible' was already stated in the type's module 'Foundation'
E por causa desse aviso, Data
não é impresso usando o description
.
Isso não é suportado?
Como diz a resposta de Claus Jørgensen , você não pode "substituir" a testemunha do protocolo
description
em sua própria extensão.Se o propósito de fazer isso é apenas obter
print
os dados diretamente, há uma alternativa.Veja bem,
print
ele não é usado apenasCustomStringConvertible.description
para imprimir valores.print
Ele é usado apenasString.init(describing:)
para descobrir qual string imprimir eString.init(describing:)
primeiro verifica se o valor está em conformidade comTextOutputStreamable
, antes de verificar aCustomStringConvertible
conformidade.Felizmente,
Data
não está de acordo comTextOutputStreamable
, então você pode escreverDito isso, isso seria um problema quando em alguma versão futura
Data
estiver em conformidade comTextOutputStreamable
. Portanto, a melhor coisa a fazer é morder a bala e escrever explicitamentedata.base64EncodedString()
em suasprint
chamadas.Como diz o erro,
Data
já está em conformidade comCustomStringConvertible
(eCustomDebugStringConvertible
) e, portanto, já possui umadescription
propriedade.Você não pode substituir esta propriedade (nem pode herdar de Data, pois é uma struct)
Em vez disso, você precisa (e deve) criar uma propriedade diferente para sua descrição personalizada.
Por exemplo:
No entanto, isso é um tanto inútil, pois você pode simplesmente chamar o método diretamente, a menos que haja mais no seu código.