Bu, elde edilen dizeye enterpolasyon yapılmasının genellikle istenmeyen olması nedeniyle bu çekme talebinde yapılan bir değişikliktir Optional(...)
ve örtük olarak sarmalanmamış seçeneklerin olduğu durumlarda özellikle şaşırtıcı olabilir . Bu değişikliğin tam tartışmasını burada posta listesinde görebilirsiniz .
Çekme isteği tartışmasında belirtildiği gibi (ne yazık ki Xcode tarafından olmasa da) - uyarıyı susturmanın kullanımından biraz daha hoş bir yolu, String(describing:)
enterpolasyon yaptığınız şeyin isteğe bağlı türüne bir atama eklemektir, örneğin:
var i: Int? = 5
var d: Double? = nil
print("description of i: \(i as Int?)")
print("description of d: \(d as Double?)")
Bu da şu şekilde genelleştirilebilir as Optional
:
print("description of i: \(i as Optional)")
print("description of d: \(d as Optional)")
Swift 5'te, SE-0228 tarafından sunulan yeni dizi enterpolasyon sistemiyle , başka bir seçenek de şunlar için özel bir appendInterpolation
aşırı yük eklemektir 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)")
Ve isterseniz, uyarıyı tamamen bir modül içinde (veya olarak işaretlerseniz belirli bir dosya içinde) devre dışı bırakmak için bağımsız değişken etiketini bile kaldırabilirsiniz 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)")
Şahsen ben argüman etiketini tutmayı tercih ederim.