Questa è una modifica apportata a questa richiesta di pull poiché l'interpolazione Optional(...)
nella stringa risultante è spesso indesiderabile e può essere particolarmente sorprendente nei casi con optionals implicitamente scartate . Puoi vedere la discussione completa di questa modifica sulla mailing list qui .
Come accennato nella discussione sulla richiesta pull (anche se sfortunatamente non da Xcode), un modo leggermente più carino per silenziare l'avviso rispetto all'uso di String(describing:)
è aggiungere un cast al tipo opzionale di qualunque cosa tu stia interpolando, quindi per esempio:
var i: Int? = 5
var d: Double? = nil
print("description of i: \(i as Int?)")
print("description of d: \(d as Double?)")
Che può anche essere generalizzato a as Optional
:
print("description of i: \(i as Optional)")
print("description of d: \(d as Optional)")
In Swift 5, con il nuovo sistema di interpolazione delle stringhe introdotto da SE-0228 , un'altra opzione è aggiungere un appendInterpolation
sovraccarico personalizzato per 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 lo desideri, puoi anche rimuovere l'etichetta dell'argomento per disabilitare l'avviso interamente all'interno di un modulo (o all'interno di un particolare file se lo contrassegni come 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)")
Anche se personalmente preferirei mantenere l'etichetta dell'argomento.