Il s'agit d'un changement qui a été apporté à cette demande d'extraction en raison du fait que l'interpolation Optional(...)
dans la chaîne résultante est souvent indésirable, et peut être particulièrement surprenante dans les cas avec des options implicitement non emballées . Vous pouvez voir la discussion complète de ce changement sur la liste de diffusion ici .
Comme mentionné dans la discussion sur la demande d'extraction (bien que malheureusement pas par Xcode) - une façon légèrement plus agréable de faire taire l'avertissement que l'utilisation de String(describing:)
consiste à ajouter un cast au type facultatif de tout ce que vous interpolez, par exemple:
var i: Int? = 5
var d: Double? = nil
print("description of i: \(i as Int?)")
print("description of d: \(d as Double?)")
Ce qui peut également être généralisé à as Optional
:
print("description of i: \(i as Optional)")
print("description of d: \(d as Optional)")
Dans Swift 5, avec le nouveau système d'interpolation de chaîne introduit par SE-0228 , une autre option consiste à ajouter une appendInterpolation
surcharge personnalisée pour 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)")
Et, si vous le souhaitez, vous pouvez même supprimer l'étiquette d'argument pour désactiver l'avertissement entièrement dans un module (ou dans un fichier particulier si vous le marquez comme 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)")
Bien que personnellement, je préfère garder l'étiquette d'argument.