Це зміна, яка була внесена в цей запит на витягування внаслідок того, що інтерполяція Optional(...)
в результуючий рядок часто є небажаною, і може бути особливо дивною у випадках із неявно розгорнутими опціонами . Ви можете переглянути повне обговорення цієї зміни у списку розсилки тут .
Як згадувалося в обговоренні запиту на витягування (хоча, на жаль, не за допомогою Xcode) - один дещо приємніший спосіб приглушити попередження, ніж використання, - String(describing:)
це додати привід до необов’язкового типу того, що ви інтерполюєте, наприклад:
var i: Int? = 5
var d: Double? = nil
print("description of i: \(i as Int?)")
print("description of d: \(d as Double?)")
Що також можна узагальнити на as Optional
:
print("description of i: \(i as Optional)")
print("description of d: \(d as Optional)")
У Swift 5, за допомогою нової системи інтерполяції рядків, запровадженої SE-0228 , ще одним варіантом є додавання власного appendInterpolation
перевантаження для 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)")
І, за бажанням, ви навіть можете видалити мітку аргументу, щоб повністю вимкнути попередження в модулі (або в певному файлі, якщо ви позначите його як 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)")
Хоча особисто я волів би зберегти мітку аргументів.