Esta é uma alteração que foi feita nesta solicitação de pull devido ao fato de que a interpolação Optional(...)na string resultante é frequentemente indesejável e pode ser especialmente surpreendente em casos com opcionais não embalados implicitamente . Você pode ver a discussão completa sobre essa mudança na lista de discussão aqui .
Conforme mencionado na discussão de solicitação pull (embora infelizmente não seja pelo Xcode) - uma maneira um pouco melhor de silenciar o aviso do que o uso de String(describing:)é adicionar um elenco ao tipo opcional de tudo o que você está interpolando, por exemplo:
var i: Int? = 5
var d: Double? = nil
print("description of i: \(i as Int?)")
print("description of d: \(d as Double?)")
Que também pode ser generalizado para as Optional:
print("description of i: \(i as Optional)")
print("description of d: \(d as Optional)")
No Swift 5, com o novo sistema de interpolação de string introduzido por SE-0228 , outra opção é adicionar uma appendInterpolationsobrecarga personalizada para DefaultStringInterpolation:
extension DefaultStringInterpolation {
mutating func appendInterpolation<T>(optional: T?) {
appendInterpolation(String(describing: optional))
}
}
var i: Int? = 5
var d: Double? = nil
print("description of i: \(optional: i)")
print("description of d: \(optional: d)")
E, se desejar, você pode até mesmo remover o rótulo do argumento para desativar o aviso inteiramente em um módulo (ou em um arquivo específico, se você marcá-lo como fileprivate):
extension DefaultStringInterpolation {
mutating func appendInterpolation<T>(_ optional: T?) {
appendInterpolation(String(describing: optional))
}
}
var i: Int? = 5
var d: Double? = nil
print("description of i: \(i)")
print("description of d: \(d)")
Embora pessoalmente eu prefira manter o rótulo do argumento.