यह एक बदलाव है जो इस पुल अनुरोध में इस तथ्य के कारण किया गया था कि Optional(...)
परिणामी स्ट्रिंग में प्रक्षेप अक्सर अवांछनीय होता है, और विशेष रूप से अंतर्निहित अलिखित वैकल्पिक के साथ मामलों में आश्चर्यजनक हो सकता है । इस बदलाव की पूरी चर्चा आप यहां मेलिंग सूची पर देख सकते हैं ।
जैसा कि पुल अनुरोध चर्चा में उल्लेख किया गया है (हालांकि दुर्भाग्य से एक्सकोड द्वारा नहीं) - एक थोड़ा अच्छा तरीका यह है कि इसके उपयोग की तुलना में चेतावनी को चुप 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)")
स्विफ्ट 5 में, नए स्ट्रिंग प्रक्षेप प्रणाली द्वारा शुरू की के साथ एसई 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)")
हालांकि व्यक्तिगत रूप से मैं तर्क लेबल रखना पसंद करूंगा।